Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo

This commit is contained in:
2026-04-28 12:01:56 +02:00
253 changed files with 44245 additions and 396029 deletions

View File

@@ -151,7 +151,11 @@
<Compile Include="ViewModel\AiConfigVM.cs" />
<Compile Include="ViewModel\AiPromptbausteinFolderVM.cs" />
<Compile Include="ViewModel\AiPromptbausteinPromptVM.cs" />
<Compile Include="ViewModel\AiPromptbausteinRoutineStepVM.cs" />
<Compile Include="ViewModel\AiPromptbausteinRoutineVM.cs" />
<Compile Include="ViewModel\AiUserSettingVM.cs" />
<Compile Include="ViewModel\ListViewModel\AiPromptbausteinRoutineListVM.cs" />
<Compile Include="ViewModel\ListViewModel\AiPromptbausteinRoutineStepListVM.cs" />
<Compile Include="ViewModel\ListViewModel\AiPromptbausteinPromptListVM.cs" />
<Compile Include="ViewModel\ListViewModel\AiPromptbausteinFolderListVM.cs" />
<Compile Include="ViewModel\ListViewModel\TextModuleListVM.cs" />
@@ -199,9 +203,13 @@
<Compile Include="View\Detail\AI\AiConfigView.xaml.cs">
<DependentUpon>AiConfigView.xaml</DependentUpon>
</Compile>
<Compile Include="View\Detail\Report\DatenbereinigungView.xaml.cs">
<DependentUpon>DatenbereinigungView.xaml</DependentUpon>
</Compile>
<Compile Include="View\Document\RtfEditView.xaml.cs">
<DependentUpon>RtfEditView.xaml</DependentUpon>
</Compile>
<Compile Include="View\Navigation\Filter\ValueListFilter.cs" />
<Compile Include="View\TemplateSelectors\AiConversationMessageTemplateSelector.cs" />
<Compile Include="View\Windows\AnimatedBeWoWindow.xaml.cs">
<DependentUpon>AnimatedBeWoWindow.xaml</DependentUpon>
@@ -330,6 +338,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="View\Detail\Report\DatenbereinigungView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="View\Document\RtfEditView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -659,6 +671,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="View\Controls\Utils\HelpInfoControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="View\Controls\Wohnhilfe\CustomerWohnhilfeControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -1597,6 +1613,9 @@
<Compile Include="View\Controls\Utils\ColorPicker.xaml.cs">
<DependentUpon>ColorPicker.xaml</DependentUpon>
</Compile>
<Compile Include="View\Controls\Utils\HelpInfoControl.xaml.cs">
<DependentUpon>HelpInfoControl.xaml</DependentUpon>
</Compile>
<Compile Include="View\Controls\Wohnhilfe\CustomerWohnhilfeControl.xaml.cs">
<DependentUpon>CustomerWohnhilfeControl.xaml</DependentUpon>
</Compile>

View File

@@ -18,7 +18,7 @@ namespace BeWo.Converter
{
var showOnlyArchived = false;
var showOnlyOnlyDeleted = false;
CustomFilter customFilter = null;
IList<CustomFilter> customFilters = null;
if (values.Length >= 3)
{
@@ -29,9 +29,9 @@ namespace BeWo.Converter
if (values.Length >= 4)
{
if (values[3] is CustomFilter)
if (values[3] is IList<CustomFilter>)
{
customFilter = values[3] as CustomFilter;
customFilters = values[3] as IList<CustomFilter>;
}
if (values.Length >= 5)
@@ -51,14 +51,15 @@ namespace BeWo.Converter
var ret = (values[0] as IEnumerable<IFilterableDC>).Where(
dc =>
{
var filterRelevants = dc.FilterRelevants != null && dc.FilterRelevants.ContainsAll(lFilter) && (customFilter == null || customFilter.IsValid(dc));
var filterRelevants = dc.FilterRelevants != null && dc.FilterRelevants.ContainsAll(lFilter);
var aktiv = (!showOnlyOnlyDeleted && !showOnlyArchived && dc.ActivationType == ActivationTypeId.Active);
var archiviert = ((showOnlyArchived && dc.ActivationType == ActivationTypeId.Archived));
var geloescht = ((!showOnlyArchived && showOnlyOnlyDeleted && dc.ActivationType == ActivationTypeId.Deleted));
var geloeschtOderArchiviert = (showOnlyArchived && dc.ActivationType == ActivationTypeId.Archived || showOnlyOnlyDeleted && dc.ActivationType == ActivationTypeId.Deleted) && filterRelevants;
var ergebnis = (aktiv || archiviert || geloescht || geloeschtOderArchiviert) && filterRelevants;
var customerFilterValid = (customFilters == null || customFilters.All(f => f.IsValid(dc)));
var ergebnis = (aktiv || archiviert || geloescht || geloeschtOderArchiviert) && filterRelevants && customerFilterValid;
return ergebnis;
});

View File

@@ -100,6 +100,10 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAnalysisService/CreateAnnualReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.AnnualReportDC> CreateAnnualReport(System.Nullable<long> costbearerOid, System.Nullable<long> teamOid, System.Nullable<long> customerCareTypeValueListEntryOid, System.DateTime startDate, System.DateTime endDate);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAnalysisService/CreateAnnualReport2", ReplyAction="http://tempuri.org/IAnalysisService/CreateAnnualReport2Response")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAnalysisService/CreateAnnualReport2BeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.AnnualReportDC> CreateAnnualReport2(BS.Shared.DataContracts.AnnualReportConfigDC config);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAnalysisService/CreateAccountingReport", ReplyAction="http://tempuri.org/IAnalysisService/CreateAccountingReportResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAnalysisService/CreateAccountingReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
BS.Shared.DataContracts.Reports.AccountingReportDC CreateAccountingReport(System.DateTime start, System.DateTime end);
@@ -243,6 +247,11 @@ namespace BeWo.ServiceProxy
return base.Channel.CreateAnnualReport(costbearerOid, teamOid, customerCareTypeValueListEntryOid, startDate, endDate);
}
public System.Collections.Generic.List<BS.Shared.DataContracts.AnnualReportDC> CreateAnnualReport2(BS.Shared.DataContracts.AnnualReportConfigDC config)
{
return base.Channel.CreateAnnualReport2(config);
}
public BS.Shared.DataContracts.Reports.AccountingReportDC CreateAccountingReport(System.DateTime start, System.DateTime end)
{
return base.Channel.CreateAccountingReport(start, end);

View File

@@ -217,6 +217,11 @@ namespace BeWo.ServiceProxy
"lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactTeamDC> FindLeadingCompactTeamsOfEmployee(long employeeOid);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEmployeeService/GetActiveCompactEmployeesByOids", ReplyAction="http://tempuri.org/IEmployeeService/GetActiveCompactEmployeesByOidsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IEmployeeService/GetActiveCompactEmployeesByOidsBeWoFaultFault" +
"", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactEmployeeDC> GetActiveCompactEmployeesByOids(System.Collections.Generic.List<long> employeeOids);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEmployeeService/ArchiveEmployee", ReplyAction="http://tempuri.org/IEmployeeService/ArchiveEmployeeResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IEmployeeService/ArchiveEmployeeBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
void ArchiveEmployee(long pOid, long pVersion);
@@ -838,6 +843,11 @@ namespace BeWo.ServiceProxy
return base.Channel.FindLeadingCompactTeamsOfEmployee(employeeOid);
}
public System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactEmployeeDC> GetActiveCompactEmployeesByOids(System.Collections.Generic.List<long> employeeOids)
{
return base.Channel.GetActiveCompactEmployeesByOids(employeeOids);
}
public void ArchiveEmployee(long pOid, long pVersion)
{
base.Channel.ArchiveEmployee(pOid, pVersion);

View File

@@ -25,6 +25,18 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IOperationsService/GetAIVoiceTranscriptBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
BS.Shared.DataContracts.AiVoiceDataDC GetAIVoiceTranscript(BS.Shared.DataContracts.AiVoiceDataDC data);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetResourcesByOids", ReplyAction="http://tempuri.org/IOperationsService/GetResourcesByOidsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IOperationsService/GetResourcesByOidsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.ResourceDC> GetResourcesByOids(System.Collections.Generic.List<long> resourceOids);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetInactivePersons", ReplyAction="http://tempuri.org/IOperationsService/GetInactivePersonsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IOperationsService/GetInactivePersonsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
System.Collections.Generic.List<BS.Shared.DataContracts.InactivePersonDC> GetInactivePersons(int jahreUngenutzt, BS.Shared.TableID tableId);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteInactivePersons", ReplyAction="http://tempuri.org/IOperationsService/DeleteInactivePersonsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteInactivePersonsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
string DeleteInactivePersons(System.Collections.Generic.List<BS.Shared.DataContracts.InactivePersonDC> persons, bool anonymisieren);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateDienstEintrag", ReplyAction="http://tempuri.org/IOperationsService/UpdateDienstEintragResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateDienstEintragBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
void UpdateDienstEintrag(BS.Shared.DataContracts.DienstEintragDC dienstEintrag);
@@ -367,6 +379,11 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Reports.AuslastungAnalysisSupportConceptDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Reports.AuslastungAnalysisSupportConceptDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AiVoiceDataDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ResourceDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ResourceDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ValueListEntryDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InactivePersonDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InactivePersonDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstEintragDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstvertretungDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.DienstEintragDC>))]
@@ -375,7 +392,6 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceRecordDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.CostRatePeriodDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.CostRatePeriodDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ValueListEntryDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.AbsenceTimeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AbsenceTimeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AbsenceReasonDC))]
@@ -471,8 +487,6 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.SchedulerAppointmentDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Employee2SchedulerAppointmentDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Employee2SchedulerAppointmentDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ResourceDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ResourceDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.BargeldtransaktionshistoryDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.BargeldtransaktionshistoryDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.SignatureDC>))]
@@ -614,26 +628,10 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Core.BeWoFault))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Core.BeWoFaultType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Core.DateTimeSpan))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactOrganisationDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactCustomerDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactEmployeeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactSupportConceptDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactCostBearerDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactCostBearerDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactPersonDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactWohnheimDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactEmployeeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactCustomerDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactSupportConceptDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactTokenDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactTokenDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactTeamDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactVertreterEmployeeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactVertreterEmployeeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactTeamDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ValueListEntryType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.TableID))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ActivationTypeId))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.CostRatePeriodType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ValueListEntryType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AbsenceReasonVisibilityType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Sex))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SubstitutionNeed))]
@@ -648,7 +646,6 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SignatureType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SystemEntryID))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.FileAttachmentType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.TableID))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.SupportConceptApprovalInterval))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Bewilligungsart))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.FamilyStatus))]
@@ -680,6 +677,23 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Priority))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Status))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.VertretungsStatus))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactOrganisationDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactCustomerDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactEmployeeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactSupportConceptDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactCostBearerDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactCostBearerDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactPersonDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactWohnheimDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactEmployeeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactCustomerDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactSupportConceptDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactTokenDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactTokenDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactTeamDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactVertreterEmployeeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactVertreterEmployeeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactTeamDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Wohnhilfe.CustomerWohnhilfeDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Wohnhilfe.CustomerWohnhilfeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Wohnhilfe.CustomerWohnhilfeBereichBundDC))]
@@ -2008,6 +2022,21 @@ namespace BeWo.ServiceProxy
return base.Channel.GetAIVoiceTranscript(data);
}
public System.Collections.Generic.List<BS.Shared.DataContracts.ResourceDC> GetResourcesByOids(System.Collections.Generic.List<long> resourceOids)
{
return base.Channel.GetResourcesByOids(resourceOids);
}
public System.Collections.Generic.List<BS.Shared.DataContracts.InactivePersonDC> GetInactivePersons(int jahreUngenutzt, BS.Shared.TableID tableId)
{
return base.Channel.GetInactivePersons(jahreUngenutzt, tableId);
}
public string DeleteInactivePersons(System.Collections.Generic.List<BS.Shared.DataContracts.InactivePersonDC> persons, bool anonymisieren)
{
return base.Channel.DeleteInactivePersons(persons, anonymisieren);
}
public void UpdateDienstEintrag(BS.Shared.DataContracts.DienstEintragDC dienstEintrag)
{
base.Channel.UpdateDienstEintrag(dienstEintrag);

View File

@@ -17,7 +17,8 @@ namespace BeWo.View
private readonly long _CustomerOid;
private readonly Dictionary<int, AssessmentSheetValueVM> _Day2Entries = new Dictionary<int, AssessmentSheetValueVM>();
private readonly Dictionary<int, AssessmentSheetValueVM> _Day2Values = new Dictionary<int, AssessmentSheetValueVM>();
private readonly Dictionary<int, AssessmentSheetEntryVM> _Day2Entries = new Dictionary<int, AssessmentSheetEntryVM>();
private readonly AssessmentSheetEntryListVM _EntryList;
@@ -45,11 +46,13 @@ namespace BeWo.View
if (showWeek)
{
TimeSpan ts = entry.Day.Value.Subtract(_StartDate);
_Day2Entries[(int) ts.TotalDays + 1] = PossibleValues.SingleOrDefault(vm => vm.DataContract.AssessmentSheetValueOid.Equals(entry.ValueOid));
_Day2Values[(int) ts.TotalDays + 1] = PossibleValues.SingleOrDefault(vm => vm.DataContract.AssessmentSheetValueOid.Equals(entry.ValueOid));
_Day2Entries[(int)ts.TotalDays + 1] = entry;
}
else
{
_Day2Entries[entry.Day.Value.Day] = PossibleValues.SingleOrDefault(vm => vm.DataContract.AssessmentSheetValueOid.Equals(entry.ValueOid));
_Day2Values[entry.Day.Value.Day] = PossibleValues.SingleOrDefault(vm => vm.DataContract.AssessmentSheetValueOid.Equals(entry.ValueOid));
_Day2Entries[entry.Day.Value.Day] = entry;
}
}
}
@@ -471,7 +474,13 @@ namespace BeWo.View
private AssessmentSheetValueVM Get(int day)
{
return this._Day2Entries.ContainsKey(day) ? this._Day2Entries[day] : null;
var v = this._Day2Values.ContainsKey(day) ? this._Day2Values[day] : null;
if (v != null && this._Day2Entries.ContainsKey(day))
{
var e = _Day2Entries[day];
v.Tooltip = string.Format("{0}, {1:dd.MM.yyyy HH:mm} von {2}", v.Description, e.DataContract.InsTs, e.DataContract.InsUser);
}
return v;
}
private void Set(int day, AssessmentSheetValueVM value)
@@ -480,11 +489,13 @@ namespace BeWo.View
if (value.IsNew)
{
value = null;
this._Day2Values.Remove(day);
this._Day2Entries.Remove(day);
}
else
{
this._Day2Entries[day] = value;
this._Day2Values[day] = value;
this._Day2Entries.Remove(day);
}
var list = this._EntryList.VMList.Where(vm => vm.CategoryOid.Equals(this._Category.AssessmentSheetCategoryOid) && vm.Day.HasValue && vm.Day.Value.Equals(date)).ToList();

View File

@@ -29,7 +29,7 @@ namespace BeWo.View.Controls
c.shine.Visibility = Visibility.Visible;
c.tb.Text = vm.Sign;
c.border.Background = vm.Brush;
c.border.ToolTip = vm.DataContract.Tooltip;
c.border.ToolTip = vm.Tooltip;
}
else
{

View File

@@ -0,0 +1,50 @@
<UserControl
x:Class="BeWo.View.Controls.Utils.HelpInfoControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="root"
d:DesignWidth="28"
d:DesignHeight="28"
mc:Ignorable="d">
<Button
x:Name="btn"
Width="22"
Height="22"
Padding="0"
Click="btn_Click"
ToolTip="{Binding HelpToolTip, ElementName=root}"
Cursor="Hand"
FontWeight="Bold"
FontSize="13">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse
Fill="White"
Stroke="#FF14549E"
StrokeThickness="1" />
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.75" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Opacity" Value="0.6" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
<TextBlock
Text="?"
Foreground="#FF14549E"
FontWeight="Bold"
FontSize="14"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Button>
</UserControl>

View File

@@ -0,0 +1,38 @@
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
namespace BeWo.View.Controls.Utils
{
public partial class HelpInfoControl : UserControl
{
public static readonly DependencyProperty UrlProperty =
DependencyProperty.Register("Url", typeof(string), typeof(HelpInfoControl), new PropertyMetadata(null));
public string Url
{
get => (string)GetValue(UrlProperty);
set => SetValue(UrlProperty, value);
}
public static readonly DependencyProperty HelpToolTipProperty =
DependencyProperty.Register("HelpToolTip", typeof(string), typeof(HelpInfoControl), new PropertyMetadata("Hilfe aufrufen"));
public string HelpToolTip
{
get => (string)GetValue(HelpToolTipProperty);
set => SetValue(HelpToolTipProperty, value);
}
public HelpInfoControl()
{
InitializeComponent();
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(Url))
Process.Start(new ProcessStartInfo(Url) { UseShellExecute = true });
}
}
}

View File

@@ -9,8 +9,8 @@
d:DataContext="{d:DesignInstance Type=ai:AiPromptbausteinActionResultViewModel}"
d:DesignHeight="600"
d:DesignWidth="600"
mc:Ignorable="d"
Background="{StaticResource ObjectEditBackgroundBrush}">
Background="{StaticResource ObjectEditBackgroundBrush}"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View File

@@ -107,6 +107,7 @@
IsReadOnly="True"
PopUpClick="popupedit_file_PopUpClick" />
<Label
x:Name="lblBuchungsdatum"
Grid.Row="0"
Grid.Column="2"
VerticalAlignment="Center"

View File

@@ -66,10 +66,14 @@ namespace BeWo.View.Detail
if (!BeWoApp.AppSettings.ShowImportAbschlagszahlungen)
{
lblBuchungsdatum.Visibility = Visibility.Collapsed;
DateEditDefaultImportBuchungsdatum.Visibility = Visibility.Collapsed;
popupedit_file.Visibility = Visibility.Collapsed;
ButtonImport.Visibility = Visibility.Collapsed;
}
#if DEBUG
lblBuchungsdatum.Visibility = Visibility.Visible;
DateEditDefaultImportBuchungsdatum.Visibility = Visibility.Visible;
popupedit_file.Visibility = Visibility.Visible;
ButtonImport.Visibility = Visibility.Visible;
#endif

View File

@@ -0,0 +1,287 @@
<localView:BeWoView
x:Class="BeWo.View.Detail.Report.DatenbereinigungView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:localView="clr-namespace:BeWo.View"
xmlns:localViewDetail="clr-namespace:BeWo.View.Detail.Accounting"
xmlns:localViewModel="clr-namespace:BeWo.ViewModel"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
xmlns:proxy="clr-namespace:BeWo.ServiceProxy"
xmlns:r="clr-namespace:BeWo.Security"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
xmlns:val="clr-namespace:BeWo.Validation"
xmlns:utils="clr-namespace:BeWo.View.Controls.Utils"
Width="Auto"
Height="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Focusable="True">
<Grid>
<GroupBox
x:Name="groupbox_editArea"
Grid.Row="0"
Header="{markup:Translate Datenbereinigung}"
Style="{DynamicResource ObjectEditGroupBox}">
<Grid Margin="0,3,0,0" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel
Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Orientation="Horizontal">
<Label Margin="3">Anzahl Jahre ungenutzt:</Label>
<dxe:SpinEdit
x:Name="editJahre"
Grid.Row="1"
Height="20"
Width="60"
Margin="3"
MinValue="1"
MaxValue="99"
IsFloatValue="False"
VerticalContentAlignment="Center"/>
<RadioButton
x:Name="radioCustomer"
Margin="5,7,5,0"
Content="{markup:Translate Klienten}"
IsChecked="True" />
<RadioButton
x:Name="radioEmployee"
Margin="5,7,5,0"
Content="{markup:Translate Mitarbeiter}"
IsChecked="False" />
<RadioButton
x:Name="radioPersonen"
Margin="5,7,5,0"
Content="{markup:Translate Personen}"
IsChecked="False" />
<Button
x:Name="button_reload"
Grid.Column="1"
Width="80"
Height="24"
Margin="3"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Click="ReloadButton_OnClick"
Content="Aktualisieren" />
</StackPanel>
<dxg:GridControl
x:Name="datagrid_inactiveData"
Grid.Row="1"
Grid.ColumnSpan="4"
Margin="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<dxg:GridControl.Columns>
<dxg:GridColumn
x:Name="ColumnChecked"
MinWidth="30"
FieldName="IsChecked"
Header=" " />
<dxg:GridColumn
x:Name="ColumnButtons"
Width="50"
AllowEditing="False"
FieldName="ReportLink"
Header=" ">
<dxg:GridColumn.DisplayTemplate>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<Button
x:Name="btn_delete"
Width="22"
Height="22"
Margin="1"
Padding="0"
VerticalAlignment="Center"
Click="btn_delete_Click"
Content="r"
FontFamily="Webdings"
FontSize="13"
Foreground="#FF0000"
ToolTip="{markup:Translate ToolTipEndgueltigLoeschen}" />
<Button
x:Name="btn_anonymisieren"
Width="22"
Height="22"
Margin="1"
Padding="0"
VerticalAlignment="Center"
Content="?"
FontSize="14"
Foreground="#FFFFFF"
Click="btn_anonymisieren_Click"
ToolTip="{markup:Translate ToolTipAnonymisieren}" />
</StackPanel>
</ControlTemplate>
</dxg:GridColumn.DisplayTemplate>
</dxg:GridColumn>
<dxg:GridColumn
Width="150"
AllowEditing="False"
FieldName="LastName"
Header="Nachname"
ReadOnly="True" />
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="FirstName"
Header="Vorname"
ReadOnly="True" />
<dxg:GridColumn
Width="100"
AllowEditing="False"
FieldName="DateOfBirth"
EditSettings="{dxe:DateSettings DisplayFormat=d}"
Header="Geburtsdatum"
ReadOnly="True"
SortFieldName="AccountingPeriodStart" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Street"
Header="Straße"
ReadOnly="True"
SortOrder="Ascending" />
<dxg:GridColumn
MinWidth="70"
AllowEditing="False"
FieldName="PostalCode"
Header="PLZ"
ReadOnly="True" />
<dxg:GridColumn
AllowEditing="False"
FieldName="Town"
Header="Ort"
ReadOnly="True" />
<!--<dxg:GridColumn FieldName="AccountingPeriodString" Header="Abrechnungszeitraum" />-->
<dxg:GridColumn
MinWidth="70"
AllowEditing="False"
FieldName="LastUsedOn"
Header="Zuletzt verwendet am"
ReadOnly="True">
</dxg:GridColumn>
<dxg:GridColumn
AllowEditing="False"
FieldName="Notice"
Header="Bemerkung"
ReadOnly="True" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView
x:Name="gridView"
AllowBestFit="True"
BestFitMode="Smart"
Loaded="gridView_Loaded"
NavigationStyle="Cell"
ScrollingMode="Smart"
ShowGroupPanel="False"
SnapsToDevicePixels="True" />
</dxg:GridControl.View>
</dxg:GridControl>
<Grid
Grid.Row="1"
Grid.ColumnSpan="4"
Margin="5,2,5,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal">
<Label
Margin="10,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content="{Binding FilterResultAmountSum, Converter={StaticResource StringFormatConverter}, ConverterParameter='{}Summe aller Rechnungen: {0:c}'}"
FontSize="14"
Foreground="{StaticResource GridPrintMenuLightBrush}" />
<Label
Margin="0,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content=" | "
FontSize="14"
Foreground="{StaticResource GridPrintMenuLightBrush}" />
<Label
x:Name="lblAmoutNotPaid"
Margin="0,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content="{Binding FilterResultAmountNotPaidSum, Converter={StaticResource StringFormatConverter}, ConverterParameter='{}Summe der noch offenen Rechnungen: {0:c}'}"
FontSize="14"
Foreground="{StaticResource GridPrintMenuLightBrush}" />
</StackPanel>
</Grid>
<StackPanel Grid.Row="2" Orientation="Horizontal">
<Button
Name="button_checkAllLeistungen"
Margin="10,3,0,0"
HorizontalAlignment="Left"
Click="button_checkAll_Click">
Alle auswählen
</Button>
<Button
Name="button_uncheckAllLeistungen"
Margin="10,3,0,0"
HorizontalAlignment="Left"
Click="button_uncheckAll_Click">
Alle abwählen
</Button>
<Button
Name="button_deleteAll"
Margin="20,3,0,0"
HorizontalAlignment="Left"
Click="button_deleteAll_Click">
Ausgewählte löschen
</Button>
<utils:HelpInfoControl Margin="2,6,2,2" Url="{markup:Translate EndgueltigLoeschenHilfeUrl}" ToolTip="{markup:Translate ToolTipEndgueltigLoeschen}" />
<Button
Name="button_anonymisierenAll"
Margin="10,3,0,0"
HorizontalAlignment="Left"
Click="button_anonymisierenAll_Click">
Ausgewählte anonymisieren
</Button>
<utils:HelpInfoControl Margin="2,6,2,2" Url="{markup:Translate AnonymisierenHilfeUrl}" ToolTip="{markup:Translate ToolTipAnonymisieren}" />
</StackPanel>
</Grid>
</GroupBox>
</Grid>
</localView:BeWoView>

View File

@@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Navigation;
using System.Windows.Threading;
using BeWo.Core;
using BeWo.ServiceProxy;
using BeWo.View.Windows;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Grid;
using Microsoft.Win32;
using Newtonsoft.Json;
namespace BeWo.View.Detail.Report
{
public partial class DatenbereinigungView : BeWoView
{
public DatenbereinigungView()
{
this.InitializeComponent();
editJahre.Value = 10;
button_reload.Focus();
CheckRights();
}
private void CheckRights()
{
if (!BeWoApp.AppSettings.AllowStorno)
{
ColumnButtons.MinWidth = 67;
}
}
private void RefreshList()
{
DateTime? start = null;
DateTime? end = null;
//bool filterByInvoiceDate = radioFilterByInvoiceDate.IsChecked.Value;
var tid = TableID.Customer;
if (radioEmployee.IsChecked == true) {
tid = TableID.Employee;
} else if (radioPersonen.IsChecked == true) {
tid = TableID.Person;
}
int anzahlJahre = (int)editJahre.Value;
ServiceFacade.DoOperationsServiceAsync(s => s.GetInactivePersons(anzahlJahre, tid), UpdateList);
}
private void UpdateList(IList<InactivePersonDC> dcList)
{
this.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
//ViewModel.UpdateList(dcList);
this.datagrid_inactiveData.ItemsSource = dcList;
this.gridView.BestFitColumns();
});
}
private void ReloadButton_OnClick(object sender, RoutedEventArgs e)
{
RefreshList();
}
private void btn_delete_Click(object sender, RoutedEventArgs e)
{
var vm = this.datagrid_inactiveData.GetCurrentValue<InactivePersonDC>();
if (MessageBox.Show("Sind Sie sicher, dass Sie die gewählte Rechnung löschen möchten?", "Rechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
}
}
private void btn_anonymisieren_Click(object sender, RoutedEventArgs e)
{
var vm = this.datagrid_inactiveData.GetCurrentValue<InactivePersonDC>();
if (MessageBox.Show("Sind Sie sicher, dass Sie die gewählte Rechnung löschen möchten?", "Rechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
}
}
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
this.gridView.BestFitColumns();
}
private void button_checkAll_Click(object sender, RoutedEventArgs e)
{
var visible = GetVisibleVMs();
foreach (var item in visible)
{
item.IsChecked = true;
}
datagrid_inactiveData.RefreshData();
}
private void button_uncheckAll_Click(object sender, RoutedEventArgs e)
{
var visible = GetVisibleVMs();
foreach (var item in visible)
{
item.IsChecked = false;
}
datagrid_inactiveData.RefreshData();
}
private void button_deleteAll_Click(object sender, RoutedEventArgs e)
{
}
private void button_anonymisierenAll_Click(object sender, RoutedEventArgs e)
{
}
private IList<InactivePersonDC> GetVisibleVMs()
{
var list = new List<InactivePersonDC>();
var items = datagrid_inactiveData.ItemsSource as IList<InactivePersonDC>;
if (items != null)
{
for (int i = 0; i < items.Count; i++)
{
if (datagrid_inactiveData.IsRowVisible(i))
{
var vm = datagrid_inactiveData.GetRow(i) as InactivePersonDC;
if (vm != null)
{
list.Add(vm);
}
}
}
}
return list;
}
}
}

View File

@@ -37,7 +37,7 @@ namespace BeWo.View.Document
view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "", defaultBerichte);
//view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "");
var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 500);
var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 600);
view.ButtonCancelClicked += () => beWoWindow.Close();
view.ButtonCreateForSelectionClicked += () =>
@@ -104,6 +104,7 @@ namespace BeWo.View.Document
Node = rootNode
};
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
rootNode.Content = vm;
rootNode.IsExpandButtonVisible = DefaultBoolean.True;
rootNode.IsExpanded = expandItems;
@@ -154,6 +155,7 @@ namespace BeWo.View.Document
BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List<BeWoFolderDC>() }
};
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
node.Content = vm;
treeControl.View.Nodes.Add(node);
node.IsExpandButtonVisible = DefaultBoolean.True;
@@ -190,6 +192,7 @@ namespace BeWo.View.Document
};
DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc);
folder_vm.SortName = String.Format("z_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
var newFolderNode = new TreeListNode()
{
Content = folder_vm,
@@ -313,6 +316,7 @@ namespace BeWo.View.Document
}
}
DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc);
folder_vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
var newFolderNode = new TreeListNode()
{
Content = folder_vm,

View File

@@ -67,6 +67,9 @@
<MenuItem.Icon>
<Image Source="..\Ressources\Icons\Rename24.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Berechtigungen">
</MenuItem>
<Separator />
<MenuItem Header="Neue Vorlage">

View File

@@ -1447,6 +1447,10 @@ namespace BeWo.View.Document
{
this.EditSelectedTemplateFolder();
}
else if (twi.Header.Equals("Berechtigungen"))
{
this.OpenSelectRightsDialog();
}
else if (twi.Header.Equals("Löschen"))
{
this.DeleteTemplateFolderWithAllSubfolders(row.DataContract.BeWoFolderDC);
@@ -1566,6 +1570,11 @@ namespace BeWo.View.Document
//TemplateTreeView.SelectCell(h, template_treeview_control.Columns[0]);
//TemplateTreeView.ShowEditForm();
}
private void OpenSelectRightsDialog()
{
}

View File

@@ -31,9 +31,10 @@
<Label Margin="0,0,0,0" x:Name="lblTemplate" Content="Vorlage:"/>
<dxg:TreeListControl x:Name="treelistcontrol_template" Grid.Row="1" Grid.ColumnSpan="2" DefaultSorting="Name" Margin="5,0,5,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<dxg:TreeListControl x:Name="treelistcontrol_template" Grid.Row="1" Grid.ColumnSpan="2" Margin="5,0,5,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="True" CellToolTipBinding="{Binding Description}"/>
<dxg:TreeListColumn FieldName="Name" CellToolTipBinding="{Binding Description}"/>
<dxg:TreeListColumn FieldName="SortName" AllowSorting="True" SortIndex="0" SortOrder="Ascending" Visible="False"/>
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="TreeView_template" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" AutoWidth="True"
@@ -59,8 +60,15 @@
</dxg:TreeListView>
</dxg:TreeListControl.View>
</dxg:TreeListControl>
<WrapPanel Grid.Row="5" Grid.ColumnSpan="2" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0 5 5 5">
<WrapPanel Grid.Row="5" Grid.ColumnSpan="1" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="0 5 5 5">
<Button Margin="10 0 0 0"
Name="button_aufklappenAllGoals" Click="button_aufklappenAll_Click"
HorizontalAlignment="Left">Alle aufklappen</Button>
<Button Margin="5 0 0 0"
Name="button_zuklappenAllGoals" Click="button_zuklappenAll_Click"
HorizontalAlignment="Left">Alle zuklappen</Button>
</WrapPanel>
<WrapPanel Grid.Row="5" Grid.Column="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0 5 5 5">
<Button x:Name="Button_SelectTemplate" Content="Dokument erstellen" Margin="0 0 5 0" Click="Button_CreateTemplateForSelection_Click" />
<Button x:Name="Button_SelectFolder" Content="Dokument speichern" Margin="0 0 5 0" Click="Button_SelectFolder_Click" />
<Button x:Name="Button_Cancel_OnlyOne" Content="Abbrechen" Click="Button_Cancel_Click" />

View File

@@ -181,8 +181,36 @@ namespace BeWo.View.Document
private void TreeView_template_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
OpenSelectedTemplate();
var hitInfo = TreeView_template.CalcHitInfo(e.OriginalSource as DependencyObject);
if (hitInfo.InRowCell)
{
e.Handled = true;
OpenSelectedTemplate();
}
}
private void button_aufklappenAll_Click(object sender, RoutedEventArgs e)
{
ExpandAllTreeItems(TreeView_template.Nodes, true);
}
private void button_zuklappenAll_Click(object sender, RoutedEventArgs e)
{
ExpandAllTreeItems(TreeView_template.Nodes, false);
}
private void ExpandAllTreeItems(TreeListNodeCollection nodes, bool expanded)
{
foreach (var node in nodes)
{
node.IsExpanded = expanded;
ExpandAllTreeItems(node.Nodes, expanded);
}
//TreeView_template.items
}
}
}

View File

@@ -119,6 +119,10 @@
Name="tabitem_flexibleReport"
Header="{markup:Translate Pivot Tabelle}"
Selector.Selected="tabitem_flexibleReport_Selected" />
<TabItem
Name="tabitem_Datenbereinigung"
Header="{markup:Translate Datenbereinigung}"
Selector.Selected="tabitem_Datenbereinigung_Selected" />
<!--<TabItem Header="Spitzabrechnung" Name="tabitem_settlement" Selector.Selected="tabitem_settlement_Selected"/>-->
</TabControl>

View File

@@ -643,6 +643,25 @@ namespace BeWo.View.Master
SelectStundenzettelTabItem();
}
private void tabitem_Datenbereinigung_Selected(object sender, RoutedEventArgs e)
{
if (ignoreSelectTabEvents)
return;
SelectDatenbereinigungTabItem();
}
private void SelectDatenbereinigungTabItem()
{
tabitem_Datenbereinigung.IsSelected = true;
if (!OpenViews.ContainsKey(tabitem_Datenbereinigung))
{
OpenViews[tabitem_Datenbereinigung] = new DatenbereinigungView();
}
Show(tabitem_Datenbereinigung);
}
private void SelectFlexibleReportTabItem()
{
tabitem_flexibleReport.IsSelected = true;

View File

@@ -31,6 +31,7 @@ using System.Collections;
using System.Windows.Input;
using BeWo.Core.Commands;
using BeWo.ViewModel.View.AI;
using DevExpress.Xpf.Editors;
namespace BeWo.View.Navigation
{
@@ -42,8 +43,9 @@ namespace BeWo.View.Navigation
//private readonly CheckBox chkShowOnlyMyCustomers;
//private readonly CheckBox chkShowOnlyTeamCustomers;
private readonly ComboBox supportConceptFilterComboBox;
private IEnumerable<IFilterableDC> objectList;
private readonly ComboBoxEdit betreuungsartFilterComboBox;
private IEnumerable<IFilterableDC> objectList;
private IEnumerable<IFilterableDC> recentList;
public CustomerNavigationView()
@@ -169,10 +171,46 @@ namespace BeWo.View.Navigation
mainNavigationView.sortPanel.Children.Insert(3, lbl);
mainNavigationView.sortPanel.Children.Insert(4, supportConceptFilterComboBox);
betreuungsartFilterComboBox = new ComboBoxEdit();
betreuungsartFilterComboBox.FontSize = 12;
betreuungsartFilterComboBox.Margin = new Thickness(10, 0, 0, 0);
betreuungsartFilterComboBox.Width = 150;
betreuungsartFilterComboBox.IsTextEditable = false;
betreuungsartFilterComboBox.NullText = Translator.Translate("Nach Betreuungsart filtern");
betreuungsartFilterComboBox.ItemsSource = ServiceFacade.DoValueListServiceSync(s => s.GetAllValueListEntrysByType(ValueListEntryType.CustomerCareType));
betreuungsartFilterComboBox.DisplayMember = "TypeDescription";
betreuungsartFilterComboBox.StyleSettings = new CheckedComboBoxStyleSettings();
betreuungsartFilterComboBox.EditValueChanged += BetreuungsartComboBox_EditValueChanged;
//< dxe:ComboBoxEdit x:Name = "checkedComboBox"
// NullText = "Select categories"
// IsTextEditable = "False"
// ItemsSource = "{Binding Categories}"
// EditValue = "{Binding SelectedCategories}"
// DisplayMember = "CategoryName"
// ShowCustomItems = "True" >
// < dxe:ComboBoxEdit.StyleSettings >
// < dxe:CheckedComboBoxStyleSettings />
// </ dxe:ComboBoxEdit.StyleSettings >
// </ dxe:ComboBoxEdit >
lbl = new TextBlock
{
Text = Translator.Translate("Betreuungsart:"),
FontSize = 12,
Margin = new Thickness(8, 2, -3, 0)
};
mainNavigationView.sortPanel.Children.Insert(5, lbl);
mainNavigationView.sortPanel.Children.Insert(6, betreuungsartFilterComboBox);
UpdateCustomFilter();
}
public Dictionary<TableID, long[]> GetVisibleInformationReferences()
public Dictionary<TableID, long[]> GetVisibleInformationReferences()
{
var visible = mainNavigationView.objectListBox.ItemsSource;
@@ -218,14 +256,37 @@ namespace BeWo.View.Navigation
UpdateCustomFilter();
}
private CustomFilter CreateNewCustomFilter()
private void BetreuungsartComboBox_EditValueChanged(object sender, EditValueChangedEventArgs e)
{
UpdateCustomFilter();
}
private CustomFilter CreateNewCustomerFilter()
{
var filter = new CustomerNavigationFilter { CustomerFilter = ((CustomerFilterItem)supportConceptFilterComboBox.SelectedItem)?.CustomerFilter ?? CustomerFilterEnum.MyCustomer };
return filter;
}
private void OnLoaded(object sender, RoutedEventArgs e)
private CustomFilter CreateNewBetreuungsartFilter()
{
if (betreuungsartFilterComboBox.SelectedItems == null)
return null;
var list = new List<ValueListEntryDC>();
foreach (var item in betreuungsartFilterComboBox.SelectedItems)
{
list.Add(item as ValueListEntryDC);
}
var filter = new ValueListFilter { SelectedValueListEntries = list, ValueListProperty = "CustomerCareTypes" };
return filter;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
ServiceFacade.DoCustomerServiceAsync(s => s.ConvertToNewSubstitutionType(), n => this.Dispatch(delegate
{
@@ -237,8 +298,8 @@ namespace BeWo.View.Navigation
private void UpdateCustomFilter()
{
mainNavigationView.CustomFilter = CreateNewCustomFilter();
}
mainNavigationView.CustomFilters = new List<CustomFilter> { CreateNewCustomerFilter(), CreateNewBetreuungsartFilter() };
}
private void ChkShowOnlyMyCustomers_Click(object sender, RoutedEventArgs e)
{

View File

@@ -0,0 +1,50 @@
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using System.Collections.Generic;
using System.Reflection;
namespace BeWo.View.Navigation.Filter
{
public class ValueListFilter : CustomFilter
{
public IList<ValueListEntryDC> SelectedValueListEntries { get; set; }
public string ValueListProperty { get; set; }
public override bool IsValid(IFilterableDC dc)
{
var val = GetPropertyValue(dc, ValueListProperty);
if (SelectedValueListEntries != null && SelectedValueListEntries.Count > 0)
{
if (val != null)
{
foreach (var cct in SelectedValueListEntries)
{
if (val.ToString().Contains(cct.DisplayName))
{
return true;
}
}
}
return false;
}
return true;
}
private object GetPropertyValue(object obj, string propertyName)
{
if (obj == null || string.IsNullOrWhiteSpace(propertyName))
return null;
var prop = obj.GetType().GetProperty(
propertyName,
BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase
);
return prop?.GetValue(obj);
}
}
}

View File

@@ -145,7 +145,7 @@
<Binding />
<Binding ElementName="textbox_search" Path="Text" />
<Binding ElementName="chkShowArchived" Path="IsChecked" />
<Binding Path="CustomFilter">
<Binding Path="CustomFilters">
<Binding.RelativeSource>
<RelativeSource AncestorType="{x:Type localNavView:MainNavigationView}" Mode="FindAncestor" />
</Binding.RelativeSource>

View File

@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
@@ -27,7 +28,7 @@ namespace BeWo.View.Navigation
{
public partial class MainNavigationView : INotifyPropertyChanged
{
internal CustomFilter _CustomFilter;
internal IList<CustomFilter> _CustomFilters;
private readonly string _DetailsLoadLock = string.Empty;
@@ -164,18 +165,18 @@ namespace BeWo.View.Navigation
}
}
public CustomFilter CustomFilter
public IList<CustomFilter> CustomFilters
{
get
{
return _CustomFilter;
return _CustomFilters;
}
set
{
_CustomFilter = value;
_CustomFilters = value.Where(f => f != null).ToList();
FirePropertyChanged("CustomFilter");
FirePropertyChanged("CustomFilters");
// if (listBoxMultiBinding.Bindings.Count == 4)
// listBoxMultiBinding.Bindings.RemoveAt(3);

View File

@@ -22,6 +22,8 @@ using System.Windows.Input;
using BeWo.Core.Commands;
using DevExpress.XtraBars.Docking;
using BeWo.ViewModel.View.AI;
using DevExpress.Xpf.Editors;
using BS.Shared.Translation;
namespace BeWo.View.Navigation
{
@@ -31,8 +33,9 @@ namespace BeWo.View.Navigation
public partial class PersonNavigationView
{
private readonly ComboBox filterComboBox;
private readonly ComboBoxEdit functionFilterComboBox;
private IEnumerable<IFilterableDC> objectList;
private IEnumerable<IFilterableDC> objectList;
private IEnumerable<IFilterableDC> recentList;
public PersonNavigationView()
@@ -85,7 +88,41 @@ namespace BeWo.View.Navigation
mainNavigationView.sortPanel.Children.Insert(3, lbl);
mainNavigationView.sortPanel.Children.Insert(4, filterComboBox);
UpdateCustomFilter();
functionFilterComboBox = new ComboBoxEdit();
functionFilterComboBox.FontSize = 12;
functionFilterComboBox.Margin = new Thickness(10, 0, 0, 0);
functionFilterComboBox.Width = 150;
functionFilterComboBox.IsTextEditable = false;
functionFilterComboBox.NullText = Translator.Translate("Nach Funktion filtern");
functionFilterComboBox.ItemsSource = ServiceFacade.DoValueListServiceSync(s => s.GetAllValueListEntrysByType(ValueListEntryType.FunctionType));
functionFilterComboBox.DisplayMember = "TypeDescription";
functionFilterComboBox.StyleSettings = new CheckedComboBoxStyleSettings();
functionFilterComboBox.EditValueChanged += FunctionComboBox_EditValueChanged;
//< dxe:ComboBoxEdit x:Name = "checkedComboBox"
// NullText = "Select categories"
// IsTextEditable = "False"
// ItemsSource = "{Binding Categories}"
// EditValue = "{Binding SelectedCategories}"
// DisplayMember = "CategoryName"
// ShowCustomItems = "True" >
// < dxe:ComboBoxEdit.StyleSettings >
// < dxe:CheckedComboBoxStyleSettings />
// </ dxe:ComboBoxEdit.StyleSettings >
// </ dxe:ComboBoxEdit >
lbl = new TextBlock
{
Text = Translator.Translate("Funktion:"),
FontSize = 12,
Margin = new Thickness(8, 2, -3, 0)
};
mainNavigationView.sortPanel.Children.Insert(5, lbl);
mainNavigationView.sortPanel.Children.Insert(6, functionFilterComboBox);
UpdateCustomFilter();
}
public Dictionary<TableID, long[]> GetVisibleInformationReferences()
@@ -135,12 +172,33 @@ namespace BeWo.View.Navigation
UpdateCustomFilter();
}
private void UpdateCustomFilter()
{
mainNavigationView.CustomFilter = CreateNewPersonFilter();
}
private void FunctionComboBox_EditValueChanged(object sender, EditValueChangedEventArgs e)
{
UpdateCustomFilter();
}
private PersonNavigationFilter CreateNewPersonFilter()
private void UpdateCustomFilter()
{
mainNavigationView.CustomFilters = new List<CustomFilter> { CreateNewPersonFilter(), CreateNewFunctionFilter() };
}
private CustomFilter CreateNewFunctionFilter()
{
if (functionFilterComboBox.SelectedItems == null)
return null;
var list = new List<ValueListEntryDC>();
foreach (var item in functionFilterComboBox.SelectedItems)
{
list.Add(item as ValueListEntryDC);
}
var filter = new ValueListFilter { SelectedValueListEntries = list, ValueListProperty = "Function" };
return filter;
}
private PersonNavigationFilter CreateNewPersonFilter()
{
var filter = new PersonNavigationFilter { PersonFilter = ((PersonFilterItem)filterComboBox.SelectedItem)?.Filter ?? PersonFilterEnum.ContactPersons };

View File

@@ -283,9 +283,8 @@ namespace BeWo.View.Navigation
private void UpdateCustomFilter()
{
this.mainNavigationView.CustomFilter = this.CreateNewCustomFilter();
mainNavigationView.CustomFilters = new List<CustomFilter> { CreateNewCustomFilter() };
}
private bool mainNavigationView_ArchiveObject(IFilterableDC obj)
{

View File

@@ -23,9 +23,6 @@
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -46,20 +43,34 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Content="Jahr:" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" />
<ComboBox Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Name="combobox_year" />
<!--<Label Content="Jahr:" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" Visibility="Collapsed"/>
<ComboBox Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Name="combobox_year" Visibility="Collapsed"/>-->
<Label x:Name="lblCostcenter" Content="{markup:Translate Kostenträger:}" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" />
<uc:PopUpEdit Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="1"
IsReadOnly="True" x:Name="popupedit_costcenter" DeleteButtonVisibility="Visible" DeleteClick="popupedit_organisation_DeleteClick" PopUpClick="popupedit_costcenter_PopUpClick" HorizontalAlignment="Left" Width="200" HorizontalContentAlignment="Left" Height="24" Margin="3" />
IsReadOnly="True" x:Name="popupedit_costcenter" DeleteButtonVisibility="Visible" DeleteClick="popupedit_organisation_DeleteClick" PopUpClick="popupedit_costcenter_PopUpClick" HorizontalAlignment="Left" Width="230" HorizontalContentAlignment="Left" Height="24" Margin="3" />
<Label Content="Team:" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" />
<uc:PopUpEdit Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="2" DeleteClick="popupedit_team_DeleteClick"
IsReadOnly="True" x:Name="popupedit_team" DeleteButtonVisibility="Visible" PopUpClick="popupedit_team_PopUpClick"
HorizontalAlignment="Left" Width="200" HorizontalContentAlignment="Left" Height="24" Margin="3" />
HorizontalAlignment="Left" Width="230" HorizontalContentAlignment="Left" Height="24" Margin="3" />
<Label Content="Betreuungsart:" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="3" VerticalAlignment="Center" />
<uc:NullItemComboBox Grid.Column="1" Grid.Row="3" Margin="3" Height="23" Name="combobox_customercaretype" />
<uc:NullItemComboBox Grid.Column="1" Grid.Row="3" Margin="3" Height="23" Name="combobox_customercaretype" />
<CheckBox Grid.Column="2" Grid.Row="0" Margin="10,3,3,3" x:Name="CheckBoxStichtag" IsChecked="True" VerticalAlignment="Center" VerticalContentAlignment="Center" Content="{markup:Translate Stichtagsbezogen auswerten}" Visibility="Visible" ToolTip="{markup:Translate Bei stichtagsbezogenen Auswertungen werden nur Klienten gezählt\, die genau an dem Stichtag z.B. 31.12. des ausgewerteten Jahres einen laufenden Hilfeplan hatten.}" />
<CheckBox Grid.Column="2" Grid.Row="1" Margin="10,3,3,3" x:Name="CheckBoxNurBewilligt" IsChecked="True" VerticalAlignment="Center" VerticalContentAlignment="Center" Content="{markup:Translate Nur bewilligte Hilfepläne berücksichtigen}" Visibility="Visible" />
<Label Content="Zeitraum von" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" />
<StackPanel Orientation="Horizontal" Grid.Column="1">
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" Grid.Row="2" x:Name="datePickerStartDate" Width="100" HorizontalAlignment="Left" Margin="3,0,0,0" />
<Label Content="bis" Grid.Column="2" Grid.Row="2" VerticalAlignment="Center" />
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="3" Grid.Row="2" x:Name="datePickerEndDate" HorizontalAlignment="Left" Width="100" Margin="3,0,0,0" />
</StackPanel>
<Button x:Name="button_generate" Grid.Column="1" Grid.Row="4" Content="Aktualisieren" Click="button_generate_Click" Height="24" HorizontalAlignment="Right" Width="90" Margin="3" />

View File

@@ -28,7 +28,10 @@ namespace BeWo.View.Report.AnnualReport
{
this.InitializeComponent();
InitDateCombos();
//InitDateCombos();
datePickerStartDate.DateTime = new DateTime(DateTime.Now.Year - 1, 1, 1);
datePickerEndDate.DateTime = new DateTime(DateTime.Now.Year - 1, 12, 31);
InitCustomerCareTypeCombo();
//linkPdfExport.NavigateUri = new Uri("http://www.bewoplaner.de");
@@ -51,18 +54,18 @@ namespace BeWo.View.Report.AnnualReport
}
private void InitDateCombos()
{
var years = new List<int>();
for (int i = 0; i <= 10; i++)
{
years.Add(DateTime.Now.Year - i);
}
//private void InitDateCombos()
//{
// var years = new List<int>();
// for (int i = 0; i <= 10; i++)
// {
// years.Add(DateTime.Now.Year - i);
// }
this.combobox_year.ItemsSource = years;
this.combobox_year.SelectedItem = DateTime.Now.Year - 1;
// this.combobox_year.ItemsSource = years;
// this.combobox_year.SelectedItem = DateTime.Now.Year - 1;
}
//}
private void CreateReportView(List<AnnualReportDC> reportList )
{
@@ -120,53 +123,61 @@ namespace BeWo.View.Report.AnnualReport
private void button_generate_Click(object sender, RoutedEventArgs e)
{
//int year = DateTime.Now.Year - 1;
int year = DateTime.Now.Year - 1;
//if (combobox_year.SelectedItem != null)
//{
// year = (int)combobox_year.SelectedItem;
if (combobox_year.SelectedItem != null)
{
//}
year = (int)combobox_year.SelectedItem;
DateTime startDate = datePickerStartDate.DateTime;
DateTime endDate = datePickerEndDate.DateTime;
}
long? costbearerOid = null;
long? teamOid = null;
long? customerCareTypeOid = null;
DateTime startDate = new DateTime(year, 1, 1);
if (_SelectedOrganisation != null)
costbearerOid = _SelectedOrganisation.CostBearerOid;
long? costbearerOid = null;
long? teamOid = null;
long? customerCareTypeOid = null;
if (_SelectedTeam != null)
teamOid = _SelectedTeam.TeamOid;
if (_SelectedOrganisation != null)
costbearerOid = _SelectedOrganisation.CostBearerOid;
ValueListEntryDC en = combobox_customercaretype.SelectedItem as ValueListEntryDC;
if (_SelectedTeam != null)
teamOid = _SelectedTeam.TeamOid;
if (combobox_customercaretype.SelectedItem == null || en.TypeDescription.Equals("")) { }
else
if (combobox_customercaretype.SelectedItem != null)
{
ValueListEntryDC entry = combobox_customercaretype.SelectedItem as ValueListEntryDC;
if (entry != null)
customerCareTypeOid = entry.ValueListEntryOid;
ValueListEntryDC en = combobox_customercaretype.SelectedItem as ValueListEntryDC;
}
var config = new AnnualReportConfigDC
{
CostbearerOid = costbearerOid,
TeamOid = teamOid,
CustomerCareTypeValueListEntryOid = customerCareTypeOid,
StartDate = startDate,
EndDate = endDate,
ShowOnlyApprovedSupportConcepts = CheckBoxNurBewilligt.IsChecked ?? true,
StichtagsbezogenAuswerten = CheckBoxStichtag.IsChecked ?? true
if (combobox_customercaretype.SelectedItem == null || en.TypeDescription.Equals("") ) { }
else
if (combobox_customercaretype.SelectedItem != null)
{
ValueListEntryDC entry = combobox_customercaretype.SelectedItem as ValueListEntryDC;
if (entry != null)
customerCareTypeOid = entry.ValueListEntryOid;
};
}
ServiceFacade.DoAnalysisServiceAsync(s => s.CreateAnnualReport2(config), r => { this.Dispatch(delegate { this.CreateReportView(r); }); });
this.UpdatePDFExportUri(string.Empty);
ServiceFacade.DoAnalysisServiceAsync(s => s.CreateAnnualReport(costbearerOid, teamOid, customerCareTypeOid, startDate, startDate.AddYears(1)), r => { this.Dispatch(delegate { this.CreateReportView(r); }); });
this.UpdatePDFExportUri(string.Empty);
}
private void linkPdfExport_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
string url = String.Format("{0}/ReportView.aspx?y={1}", BeWoApp.SiteOfOrigin, combobox_year.Text);
string url = String.Format("{0}/ReportView.aspx?start={1:dd.MM.yyyy}&end={2:dd.MM.yyyy}", BeWoApp.SiteOfOrigin, datePickerStartDate.DateTime, datePickerEndDate.DateTime);
if (_SelectedOrganisation != null)
@@ -178,7 +189,8 @@ namespace BeWo.View.Report.AnnualReport
{
url += "&t=" + _SelectedTeam.TeamOid;
}
url += String.Format("&appr={0}", CheckBoxNurBewilligt.IsChecked == true ? "1" : "0");
url += String.Format("&stichtag={0}", CheckBoxStichtag.IsChecked == true ? "1" : "0");
ValueListEntryDC en = combobox_customercaretype.SelectedItem as ValueListEntryDC;

View File

@@ -580,7 +580,7 @@ namespace BeWo.View.Report.FLSReport
}
else
{
date += String.Format(" {0:0} min.", record.Start, record.End, record.RoundedDuration);
date += String.Format(" {0:0} min.", record.RoundedDuration);
}
String group = "";

View File

@@ -0,0 +1,54 @@
using System;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Feature.AI;
namespace BeWo.ViewModel
{
public class AiPromptbausteinRoutineStepVM : AbstractDCMapperVM<AiPromptbausteinRoutineStepDC>
{
private int _Position;
private AiPromptbausteinPromptDC _PromptReference;
private long _ReferenceVersion;
public AiPromptbausteinRoutineStepVM(AiPromptbausteinRoutineStepDC dc) : base(dc, dc.Oid)
{
}
public int Position
{
get => _Position;
set => SetProperty(ref _Position, value, nameof(Position), () => DataContract.Position);
}
public AiPromptbausteinPromptDC PromptReference
{
get => _PromptReference;
set => SetProperty(ref _PromptReference, value, nameof(PromptReference), () => DataContract.PromptReference);
}
public long ReferenceVersion
{
get => _ReferenceVersion;
set => SetProperty(ref _ReferenceVersion, value, nameof(ReferenceVersion), () => DataContract.ReferenceVersion);
}
protected override void InitByDataContract(AiPromptbausteinRoutineStepDC pDataContract)
{
_Position = pDataContract.Position;
_PromptReference = pDataContract.PromptReference;
_ReferenceVersion = pDataContract.ReferenceVersion;
}
protected override AiPromptbausteinRoutineStepDC MapToDataContract(AiPromptbausteinRoutineStepDC pDataContract, bool doCommit)
{
pDataContract.Position = _Position;
pDataContract.PromptReference = _PromptReference;
pDataContract.ReferenceVersion = _ReferenceVersion;
return pDataContract;
}
}
}

View File

@@ -0,0 +1,120 @@
using System;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.DataContracts.Feature.AI;
namespace BeWo.ViewModel
{
public class AiPromptbausteinRoutineVM : AbstractDCMapperVM<AiPromptbausteinRoutineDC>
{
private string _Title;
private string _Description;
private long? _ParentFolderOid;
private CompactEmployeeDC _Creator;
private bool _IsPublic;
private int _Position;
private bool _IsFavorite;
private AiActionType _ActionType;
private bool _CanEdit;
private AiPromptbausteinRoutineStepListVM _Steps;
public AiPromptbausteinRoutineVM(AiPromptbausteinRoutineDC dc) : base(dc, dc.Oid)
{
}
public string Title
{
get => _Title;
set => SetProperty(ref _Title, value, nameof(Title), () => DataContract.Title);
}
public string Description
{
get => _Description;
set => SetProperty(ref _Description, value, nameof(Description), () => DataContract.Description);
}
public long? ParentFolderOid
{
get => _ParentFolderOid;
set => SetProperty(ref _ParentFolderOid, value, nameof(ParentFolderOid), () => DataContract.ParentFolderOid);
}
public CompactEmployeeDC Creator
{
get => _Creator;
set => SetProperty(ref _Creator, value, nameof(Creator), () => DataContract.Creator);
}
public bool IsPublic
{
get => _IsPublic;
set => SetProperty(ref _IsPublic, value, nameof(IsPublic), () => DataContract.IsPublic);
}
public int Position
{
get => _Position;
set => SetProperty(ref _Position, value, nameof(Position), () => DataContract.Position);
}
public bool IsFavorite
{
get => _IsFavorite;
set => SetProperty(ref _IsFavorite, value, nameof(IsFavorite), () => DataContract.IsFavorite);
}
public AiActionType ActionType
{
get => _ActionType;
set => SetProperty(ref _ActionType, value, nameof(ActionType), () => DataContract.ActionType);
}
public bool CanEdit
{
get => _CanEdit;
set => SetProperty(ref _CanEdit, value, nameof(CanEdit), () => DataContract.CanEdit);
}
public AiPromptbausteinRoutineStepListVM Steps
{
get => _Steps;
set => SetProperty(ref _Steps, value, nameof(Steps));
}
protected override void InitByDataContract(AiPromptbausteinRoutineDC pDataContract)
{
_Title = pDataContract.Title;
_Description = pDataContract.Description;
_ParentFolderOid = pDataContract.ParentFolderOid;
_Creator = pDataContract.Creator;
_IsPublic = pDataContract.IsPublic;
_Position = pDataContract.Position;
_IsFavorite = pDataContract.IsFavorite;
_ActionType = pDataContract.ActionType;
_CanEdit = pDataContract.CanEdit;
_Steps = new AiPromptbausteinRoutineStepListVM(pDataContract.Steps);
}
protected override AiPromptbausteinRoutineDC MapToDataContract(AiPromptbausteinRoutineDC pDataContract, bool doCommit)
{
pDataContract.Title = _Title;
pDataContract.Description = _Description;
pDataContract.ParentFolderOid = _ParentFolderOid;
pDataContract.Creator = _Creator;
pDataContract.IsPublic = _IsPublic;
pDataContract.Position = _Position;
pDataContract.IsFavorite = _IsFavorite;
pDataContract.ActionType = _ActionType;
pDataContract.CanEdit = _CanEdit;
pDataContract.Steps = _Steps.CopyToDCList(doCommit);
return pDataContract;
}
}
}

View File

@@ -30,6 +30,7 @@ namespace BeWo.ViewModel
private string _ShortcutKey;
private string _Sign;
private string _Tooltip;
public AssessmentSheetValueVM(AssessmentSheetValueDC pDC) : base(pDC, pDC.AssessmentSheetValueOid == null)
{
@@ -112,6 +113,13 @@ namespace BeWo.ViewModel
}
}
public string Tooltip
{
get { return this._Tooltip; }
set { this._Tooltip = value; }
}
public static int Compare(AssessmentSheetValueVM x, AssessmentSheetValueVM y)
{
if (x.Position.Equals(y.Position) && x.Description != null)

View File

@@ -14,6 +14,7 @@ namespace BeWo.ViewModel
private long? _DocTreeItemOid;
private long? _ParentOid;
private string _Name;
private string _SortName;
private string _Tooltip;
public DocumentTreeItemVM(DocumentTreeItemDC dc) : base(dc, dc.DocTreeItemOid == null)
@@ -54,6 +55,12 @@ namespace BeWo.ViewModel
}
}
public string SortName
{
get { return _SortName ?? _Name; }
set { _SortName = value; }
}
public string Description
{
get

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BS.Shared.DataContracts.Feature.AI;
namespace BeWo.ViewModel.ListViewModel
{
public class AiPromptbausteinRoutineListVM : AbstractDCListMapperVM<AiPromptbausteinRoutineDC, AiPromptbausteinRoutineVM>
{
public AiPromptbausteinRoutineListVM(IEnumerable<AiPromptbausteinRoutineDC> pDataContracts = null) : base(pDataContracts)
{
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BS.Shared.DataContracts.Feature.AI;
namespace BeWo.ViewModel.ListViewModel
{
public class AiPromptbausteinRoutineStepListVM : AbstractDCListMapperVM<AiPromptbausteinRoutineStepDC, AiPromptbausteinRoutineStepVM>
{
public AiPromptbausteinRoutineStepListVM(IEnumerable<AiPromptbausteinRoutineStepDC> pDataContracts = null) : base(pDataContracts)
{
}
}
}

View File

@@ -27,6 +27,7 @@ namespace BeWo.ViewModel.View.AI
private AiPromptbausteinFolderVM _SelectedFolder;
private AiPromptbausteinPromptVM _SelectedPrompt;
private AiPromptbausteinRoutineVM _SelectedRoutine;
private IBeWoWindowService WindowService { get; set; }
@@ -47,6 +48,11 @@ namespace BeWo.ViewModel.View.AI
public DelegateCommand DeletePromptCommand { get; private set; }
public DelegateCommand ChangeFavoritenStatePromptCommand { get; private set; }
public DelegateCommand OpenAddRoutineDialogCommand { get; private set; }
public DelegateCommand OpenEditRoutineDialogCommand { get; private set; }
public DelegateCommand DeleteRoutineCommand { get; private set; }
public DelegateCommand ChangeFavoritenStateRoutineCommand { get; private set; }
public bool CanEditPromptbausteine { get; set; }
public bool HasCopiedFolder => CopiedFolder is object;
public bool HasCopiedPrompt => CopiedPrompt is object;
@@ -84,6 +90,11 @@ namespace BeWo.ViewModel.View.AI
OpenEditPromptDialogCommand = new DelegateCommand(OpenEditPromptDialog, canOpenEditPromptDialog, false);
DeletePromptCommand = new DelegateCommand(OpenDeletePromptDialog, canOpenDeletePromptDialog, false);
ChangeFavoritenStatePromptCommand = new DelegateCommand(ChangeFavoritenStatePrompt, canChangeFavoritenStatePrompt, false);
OpenAddRoutineDialogCommand = new DelegateCommand(OpenAddRoutineDialog, canOpenAddRoutineDialog, false);
OpenEditRoutineDialogCommand = new DelegateCommand(OpenEditRoutineDialog, canOpenEditRoutineDialog, false);
DeleteRoutineCommand = new DelegateCommand(OpenDeleteRoutineDialog, canOpenDeleteRoutineDialog, false);
ChangeFavoritenStateRoutineCommand = new DelegateCommand(ChangeFavoritenStateRoutine, canChangeFavoritenStateRoutine, false);
CanEditPromptbausteine = BeWoApp.HasLoggedOnUserRight(UserRightType.AiModulePromptbausteineEdit);
}
@@ -99,12 +110,7 @@ namespace BeWo.ViewModel.View.AI
get => _SelectedFolder;
set
{
if (value == _SelectedFolder)
return;
_SelectedFolder = value;
FirePropertyChanged(nameof(SelectedFolder));
SetProperty(ref _SelectedFolder, value, nameof(SelectedFolder));
if (SelectedPrompt is object)
{
SelectedPrompt.IsSelected = false;
@@ -117,11 +123,18 @@ namespace BeWo.ViewModel.View.AI
get => _SelectedPrompt;
set
{
_SelectedPrompt = value;
FirePropertyChanged(nameof(SelectedPrompt));
SetProperty(ref _SelectedPrompt, value, nameof(SelectedPrompt));
SendCommand.RaiseCanExecuteChanged();
}
}
public AiPromptbausteinRoutineVM SelectedRoutine
{
get => _SelectedRoutine;
set
{
SetProperty(ref _SelectedRoutine, value, nameof(SelectedRoutine));
}
}
public AiPromptbausteinFolderListVM Folders { get; private set; }
public AiActionType LoadedActionType { get; set; }
@@ -206,6 +219,11 @@ namespace BeWo.ViewModel.View.AI
PastePromptCommand?.RaiseCanExecuteChanged();
DeletePromptCommand?.RaiseCanExecuteChanged();
ChangeFavoritenStatePromptCommand?.RaiseCanExecuteChanged();
OpenAddRoutineDialogCommand?.RaiseCanExecuteChanged();
OpenEditRoutineDialogCommand?.RaiseCanExecuteChanged();
DeleteRoutineCommand?.RaiseCanExecuteChanged();
ChangeFavoritenStateRoutineCommand?.RaiseCanExecuteChanged();
}
// --- Folder Commands ---
@@ -364,5 +382,29 @@ namespace BeWo.ViewModel.View.AI
bool canOpenEditPromptDialog() => SelectedPrompt is object;
bool canOpenDeletePromptDialog() => CanEditPromptbausteine && (SelectedPrompt?.CanEdit ?? false);
bool canChangeFavoritenStatePrompt() => SelectedPrompt is object;
// --- Routine Commands
void OpenAddRoutineDialog()
{
}
void OpenEditRoutineDialog()
{
}
void OpenDeleteRoutineDialog()
{
}
void ChangeFavoritenStateRoutine()
{
}
bool canOpenAddRoutineDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddPrompt ?? false);
bool canOpenEditRoutineDialog() => SelectedRoutine is object;
bool canOpenDeleteRoutineDialog() => CanEditPromptbausteine && (SelectedRoutine?.CanEdit ?? false);
bool canChangeFavoritenStateRoutine() => SelectedRoutine is object;
}
}

View File

@@ -467,5 +467,29 @@ namespace BeWo.ViewModel.View.Administration
{
return SelectedPrompt is object;
}
// --- Routine Commands
void OpenAddRoutineDialog()
{
}
void OpenEditRoutineDialog()
{
}
void OpenDeleteRoutineDialog()
{
}
void ChangeFavoritenStateRoutine()
{
}
//bool canOpenAddRoutineDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddPrompt ?? false);
//bool canOpenEditRoutineDialog() => SelectedRoutine is object;
//bool canOpenDeleteRoutineDialog() => CanEditPromptbausteine && (SelectedRoutine?.CanEdit ?? false);
//bool canChangeFavoritenStateRoutine() => SelectedRoutine is object;
}
}

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31729.503
# Visual Studio Version 17
VisualStudioVersion = 17.14.37111.16 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{E7543C39-A44C-40C9-82C9-E7FAA2D9A852}"
EndProject
@@ -986,6 +986,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaritasVerbandDuerenJuelich
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SamanthaRiegerIntegrationspraxis", "ReportImp\SamanthaRiegerIntegrationspraxis\SamanthaRiegerIntegrationspraxis.csproj", "{BD841D90-CD90-44B6-8B3C-5C7D05225842}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspBegleitungNrw", "ReportImp\AspBegleitungNrw\AspBegleitungNrw.csproj", "{4D48D376-DCAE-4E22-82E3-36692B0FAE29}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|.NET = Debug|.NET
@@ -12085,6 +12087,30 @@ Global
{BD841D90-CD90-44B6-8B3C-5C7D05225842}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BD841D90-CD90-44B6-8B3C-5C7D05225842}.Release|x86.ActiveCfg = Release|Any CPU
{BD841D90-CD90-44B6-8B3C-5C7D05225842}.Release|x86.Build.0 = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|.NET.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|.NET.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|x86.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Debug|x86.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|.NET.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.DebugRemote|x86.Build.0 = Debug|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|.NET.ActiveCfg = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|.NET.Build.0 = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|Any CPU.Build.0 = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|x86.ActiveCfg = Release|Any CPU
{4D48D376-DCAE-4E22-82E3-36692B0FAE29}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -12572,6 +12598,7 @@ Global
{15F9EE65-0B7F-49B6-91A7-5F606960AF4A} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{23696062-2534-49E5-B88D-E182F2399923} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{BD841D90-CD90-44B6-8B3C-5C7D05225842} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{4D48D376-DCAE-4E22-82E3-36692B0FAE29} = {D8A691C5-146D-4613-86CC-438F02FE9106}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9}

View File

@@ -1,5 +1,7 @@
using BeWo.Data.Access;
using Antlr.Runtime.Tree;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.AI;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.View.Navigation.Filter;
@@ -32,7 +34,6 @@ using FormCollection = System.Web.Mvc.FormCollection;
using GoalRating = BeWoPlanerMobil.Util.GoalRating;
using Image = System.Drawing.Image;
using ServiceRecordDC = BS.Shared.DataContracts.ServiceRecordDC;
using BeWo.Service.AI;
/*
* ToDo: Bug, wenn man auf "bearbeiten" bei einem Eintrag klickt, wird die Leistung nicht geladen
@@ -382,6 +383,8 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedZeitraum = new NullableDateTimeSpan(Model.LastSelectedServiceRecordMonth.Date.GetFirstOfMonth(), Model.LastSelectedServiceRecordMonth.Date.GetLastOfMonth());
}
Model.AiVoiceMode = UserSettingsUtils.GetSettingValueAsInteger(userSettings, SettingsKeys.AiVoiceMode);
CalculateSelectedDayCount(Model.LastSelectedServiceRecordTimeIntervalDays, Model.LastSelectedServiceRecordMonth, Model.SelectedZeitraum?.StartDate, Model.SelectedZeitraum?.EndDate, null);
var customerFilter = MobileUserSettingsUtils.GetSettingValueAsEnum(userSettings, SettingsKeys.CustomerFilterInZeiterfassung, CustomerFilterEnum.MyCustomer);
@@ -3562,35 +3565,65 @@ namespace BeWoPlanerMobil.Controllers
return View("Main", Model);
}
[HttpPost]
[Authorize]
public ActionResult SetAiVoiceMode(string mode)
{
SkipModelInitialization = true;
Model.AiVoiceMode = mode == "1" ? 1 : 0;
UpdateUserSettingsWithoutReload(SettingsKeys.AiVoiceMode, Model.AiVoiceMode.ToString());
return new HttpStatusCodeResult(200);
}
/// <summary>
/// Ermittelt die externe URL, die beim Klick auf den Test-Button aufgerufen werden soll.
/// Die callbackUrl wird als Parameter mitgegeben, damit das externe System sie verwenden kann.
/// Ermittelt die externe URL, die beim Klick auf den AI-Voice-Button aufgerufen werden soll.
/// Die callId wird server-seitig als GUID erzeugt (kryptographisch sicher) und zusammen
/// mit der URL an den Client zurückgegeben.
/// </summary>
[HttpGet]
[Authorize]
public JsonResult GetExternalCallUrl(string callId, string callbackUrl)
public JsonResult GetExternalCallUrl()
{
try
{
SkipModelInitialization = true;
// CallId server-seitig erzeugen Guid.NewGuid() ist kryptographisch sicher (128-Bit)
// In der Session speichern der Browser bekommt sie nie zu sehen
var callId = Guid.NewGuid().ToString("N");
Session["ExternalCallId"] = callId;
// CallbackUrl server-seitig zusammenbauen
var callbackUrl = Url.Action("ExternalCallCallback", "Main", new { callId }, Request.Url.Scheme);
var externalUrl = "";
if (Mandator?.OwnChatCode != null)
{
var ts = new TranscriptionService();
var avd = ts.InitTranskription(MobileSessionFacade.Tenant, false);
var sendOwnChatMessage = Model.AiVoiceMode == 0 ? false : true;
externalUrl = avd.OwnChatUrl;
var avd = ts.InitTranskription(MobileSessionFacade.Tenant, sendOwnChatMessage);
if (!string.IsNullOrEmpty(callId) && !string.IsNullOrEmpty(avd.Token))
if (!sendOwnChatMessage)
{
externalUrl = avd.OwnChatUrl;
}
else
{
avd.OwnChatUrl = null;
}
if (!string.IsNullOrEmpty(avd.Token))
{
_externalCallTokens[callId] = ts.MapAiVoiceDataDC(avd);
}
Log.Info($"GetExternalCallUrl: {callId}. Url = {externalUrl}, Transkription startet!");
//var externalBaseUrl = "https://example.com/external-service";
//var externalUrl = externalBaseUrl
// + "?callbackUrl=" + Uri.EscapeDataString(callbackUrl)
// + "&callId=" + Uri.EscapeDataString(callId);
}
else
{
@@ -3645,12 +3678,15 @@ namespace BeWoPlanerMobil.Controllers
/// </summary>
[HttpGet]
[Authorize]
public JsonResult CheckExternalCallStatus(string callId)
public JsonResult CheckExternalCallStatus()
{
var callId = Session["ExternalCallId"] as string;
if(!string.IsNullOrEmpty(callId) && _externalCallResults.TryRemove(callId, out var data))
{
_externalCallStatusMessages.TryRemove(callId, out _);
_externalCallTokens.TryRemove(callId, out _);
Session.Remove("ExternalCallId");
return Json(new { completed = true, data }, JsonRequestBehavior.AllowGet);
}
@@ -3666,8 +3702,15 @@ namespace BeWoPlanerMobil.Controllers
avd = ts.GetTranskription(avd);
statusMessage = avd.StatusMessage;
if (!String.IsNullOrEmpty(avd.OwnChatUrl)) // Wenn nicht null, dann wurde die Spracheingabe über direkt Link gestartet
{
if (!String.IsNullOrEmpty(statusMessage) && statusMessage.Contains("klicken Sie auf den Link"))
{
statusMessage = "Warte auf Beendigung der Aufzeichnung in ownChat...\r\nHINWEIS: Wenn ownChat auf diesem Gerät nicht installiert ist, ist die Spracheingabe nicht möglich. In diesem Fall brechen Sie den Vorgang bitte ab. Wenn Sie ownChat auf einem anderen Gerät nutzen, können Sie in den Einstellungen auch in den Push-Modus wechseln.";
}
}
if (!String.IsNullOrEmpty(avd.TranskriptionText))
{
statusMessage = "Transkription erfolgreich durchgeführt";
@@ -3704,13 +3747,15 @@ namespace BeWoPlanerMobil.Controllers
/// </summary>
[HttpPost]
[Authorize]
public ActionResult CancelExternalCall(string callId)
public ActionResult CancelExternalCall()
{
var callId = Session["ExternalCallId"] as string;
if(!string.IsNullOrEmpty(callId))
{
_externalCallResults.TryRemove(callId, out _);
_externalCallStatusMessages.TryRemove(callId, out _);
_externalCallTokens.TryRemove(callId, out _);
Session.Remove("ExternalCallId");
}
return new HttpStatusCodeResult(200);

View File

@@ -9,6 +9,8 @@ namespace BeWoPlanerMobil.Models
[Serializable]
public abstract class BaseSessionModel
{
public int AiVoiceMode { get; set; }
public Dictionary<string, bool> Collapsibles2IsShown { get; set; } = new Dictionary<string, bool>();
public virtual void ResetValues()

View File

@@ -820,6 +820,8 @@ namespace BeWoPlanerMobil.Models
public bool IsShowingDurationInHours { get; set; }
public int AiVoiceMode { get { return MainSessionModel.AiVoiceMode; } set { MainSessionModel.AiVoiceMode = value; } } // 0 = direct, 1 = Link senden
public string SelectedDurationUnit => IsShowingDurationInHours ? "Stunden" : "Minuten";
public DateTime LastSelectedServiceRecordMonth { get; set; }

View File

@@ -170,34 +170,35 @@
<script type="text/javascript">
var _externalCallPollingTimer = null;
var _externalCallId = null;
// Zuletzt verwendeter Modus wird aus der Session initialisiert
var _aiVoiceMode = '@Model.AiVoiceMode';
function startExternalCall() {
// Eindeutige ID für diesen Aufruf generieren
_externalCallId = 'ext-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);
// Direkt starten mit dem gespeicherten Modus, keine Moduswahl anzeigen
if (_aiVoiceMode === '1') {
$('#external-call-status-text').text('Um die Aufnahme zu starten, klicken Sie auf den Link, den wir an Ihren ownChat Account gesendet haben.');
}
else {
$('#external-call-status-text').text('Bitte wechseln Sie zu ownChat um die Aufnahme zu starten.\nHINWEIS: Wenn ownChat auf diesem Gerät nicht installiert ist, ist die Spracheingabe nicht möglich.');
}
document.getElementById('external-call-overlay').style.display = 'flex';
// Callback-URL für das externe System
var callbackUrl = window.location.origin + '@Url.Action("ExternalCallCallback", "Main")' + '?callId=' + encodeURIComponent(_externalCallId);
// Externe URL vom Server ermitteln lassen
$.ajax({
url: '@Url.Action("GetExternalCallUrl", "Main")',
data: { callId: _externalCallId, callbackUrl: callbackUrl },
type: 'GET',
success: function(result) {
if (result && result.success && result.url) {
// Overlay anzeigen und Statustext zurücksetzen
$('#external-call-status-text').text('Um die Aufnahme zu starten, klicken Sie auf den Link, den wir an Ihren ownChat Account gesendet haben.');
document.getElementById('external-call-overlay').style.display = 'flex';
// Externe URL in neuem Tab/Fenster öffnen
window.open(result.url, '_blank');
if (result && result.success) {
// Custom URL Scheme (ownchat://) per temporärem Anchor-Element öffnen
if (result.url && result.url.length > 0) {
var $a = $('<a>').attr('href', result.url).css('display', 'none').appendTo('body');
$a[0].click();
$a.remove();
}
// Polling starten - prüft regelmäßig ob der Callback aufgerufen wurde
_externalCallPollingTimer = setInterval(function() {
$.ajax({
url: '@Url.Action("CheckExternalCallStatus", "Main")',
data: { callId: _externalCallId },
type: 'GET',
success: function(pollResult) {
if (pollResult && pollResult.completed) {
@@ -213,31 +214,53 @@
});
}, 3000);
} else {
// Fehler beim Ermitteln der URL
document.getElementById('external-call-overlay').style.display = 'none';
var errorMsg = (result && result.message) ? result.message : 'Die externe URL konnte nicht ermittelt werden.';
showAlertMessageBox(errorMsg);
_externalCallId = null;
}
},
error: function() {
document.getElementById('external-call-overlay').style.display = 'none';
showAlertMessageBox('Fehler bei der Kommunikation mit dem Server.');
_externalCallId = null;
}
});
}
function openAiVoiceSettings() {
// Aktuellen Modus im Einstellungs-Overlay vorauswählen
$('input[name="aiVoiceMode"][value="' + _aiVoiceMode + '"]').prop('checked', true);
document.getElementById('aivoice-settings-overlay').style.display = 'flex';
}
function closeAiVoiceSettings() {
document.getElementById('aivoice-settings-overlay').style.display = 'none';
}
function saveAiVoiceMode() {
var selectedMode = $('input[name="aiVoiceMode"]:checked').val();
$.ajax({
url: '@Url.Action("SetAiVoiceMode", "Main")',
data: { mode: selectedMode },
type: 'POST',
success: function() {
_aiVoiceMode = selectedMode;
closeAiVoiceSettings();
cancelExternalCall();
showMessagePopup('Einstellungen gespeichert', 'Die Änderungen wurden übernommen. Bitte starten Sie die Aufnahme erneut.');
},
error: function() {
showAlertMessageBox('Fehler beim Speichern der Einstellung.');
}
});
}
function cancelExternalCall() {
// callId merken BEVOR stopExternalCallPolling() sie auf null setzt
var callIdToCancel = _externalCallId;
stopExternalCallPolling();
// Server informieren, dass abgebrochen wurde
if (callIdToCancel) {
$.ajax({
url: '@Url.Action("CancelExternalCall", "Main")',
data: { callId: callIdToCancel },
type: 'POST'
});
}
// Server informieren, dass abgebrochen wurde callId liegt serverseitig in der Session
$.ajax({
url: '@Url.Action("CancelExternalCall", "Main")',
type: 'POST'
});
}
function stopExternalCallPolling() {
@@ -245,7 +268,6 @@
clearInterval(_externalCallPollingTimer);
_externalCallPollingTimer = null;
}
_externalCallId = null;
document.getElementById('external-call-overlay').style.display = 'none';
}
@@ -716,16 +738,46 @@
@Html.Partial("RestoreServiceRecordInputsPartial", Model)
</div>
@* Waiting-Overlay für externen Aufruf *@
@* Warte-Overlay für externen Aufruf *@
<div id="external-call-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.6); z-index:9999; justify-content:center; align-items:center;">
<div style="background:white; border-radius:8px; padding:30px; text-align:center; box-shadow:0 4px 20px rgba(0,0,0,0.3);">
<div style="background:white; border-radius:8px; padding:30px; min-width:300px; text-align:center; box-shadow:0 4px 20px rgba(0,0,0,0.3);">
<div class="mb-3">
<i class="fa fa-spinner fa-spin fa-2x"></i>
</div>
<p class="mb-3" id="external-call-status-text">Warte auf Rückmeldung vom externen System...</p>
<p class="mb-3" id="external-call-status-text" style="white-space: pre-line">Bitte warten...</p>
<button type="button" class="btn btn-secondary mr-2" onclick="openAiVoiceSettings();">
<i class="fa fa-cog mr-1"></i>Einstellungen
</button>
<button type="button" class="btn btn-danger" onclick="cancelExternalCall();">Abbrechen</button>
</div>
</div>
@* Einstellungs-Overlay für Moduswahl *@
<div id="aivoice-settings-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.7); z-index:10000; justify-content:center; align-items:center;">
<div style="background:white; border-radius:8px; padding:30px; max-width:480px; box-shadow:0 4px 20px rgba(0,0,0,0.3);">
<h6 class="mb-3">Modus für Spracheingabe</h6>
<div class="form-group text-left mb-4">
<div class="form-check mb-3">
<input class="form-check-input" type="radio" name="aiVoiceMode" id="aiVoiceModeDirect" value="0" />
<label class="form-check-label font-weight-bold" for="aiVoiceModeDirect">
Spracheingabe direkt aus Mobilklient starten
</label>
<small class="form-text text-muted">Diese Option setzt voraus, dass Mobilklient und ownChat auf gleichem Endgerät genutzt werden</small>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="aiVoiceMode" id="aiVoiceModePush" value="1" />
<label class="form-check-label font-weight-bold" for="aiVoiceModePush">
Spracheingabe per Push-Nachricht starten
</label>
<small class="form-text text-muted">Diese Option ermöglicht die Nutzung von Mobilklient und ownChat auf getrennten Endgeräten wie bei der Vollversion</small>
</div>
</div>
<div class="text-right">
<button type="button" class="btn btn-secondary mr-2" onclick="closeAiVoiceSettings();">Schließen</button>
<button type="button" class="btn btn-primary" onclick="saveAiVoiceMode();">Speichern</button>
</div>
</div>
</div>
}
</div>
@* /Einzelbuchungsformular *@

View File

@@ -78,6 +78,9 @@
<Compile Include="Models\Auftragsdatei\AuftragssatzPart2.cs" />
<Compile Include="Models\Auftragsdatei\AuftragssatzPart3.cs" />
<Compile Include="Models\Auftragsdatei\AuftragssatzPart4.cs" />
<Compile Include="Models\Blocke\BlockEinsatz.cs" />
<Compile Include="Models\Blocke\BlockEinsatzPosition.cs" />
<Compile Include="Models\Blocke\BlockKlientHKP.cs" />
<Compile Include="Models\DakotaEnums.cs" />
<Compile Include="DakotaExtensions.cs" />
<Compile Include="Models\DakotaFile.cs" />
@@ -143,6 +146,9 @@
<Compile Include="Models\Segmente\KTD\SegmentKTDIDK.cs" />
<Compile Include="Models\Segmente\KTD\SegmentKTDVDT.cs" />
<Compile Include="Models\Segmente\KTD\SegmentKTDVKG.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentEHK.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentELP.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentESK.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentSLLABES.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentSLLADIA.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentSLLAMWS.cs" />
@@ -152,6 +158,7 @@
<Compile Include="Models\Segmente\SLLA\SegmentSLLATXT.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentSLLAZUV.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentSLLAZUZ.cs" />
<Compile Include="Models\Segmente\SLLA\SegmentZHK.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Models\Segmente\Segment.cs" />
<Compile Include="Models\Segmente\SLGA\SegmentSLGAFKT.cs" />

View File

@@ -195,10 +195,11 @@ namespace Dakota.Logic
info.Name1 = infoParameter.AddressInformation.OrganisationName;
info.Name2 = infoParameter.AddressInformation.Phone;
info.Name3 = infoParameter.AddressInformation.Mail;
info.Name4 = "Entwicklung dakota.exchange@ownsoft.de";
info.Name3 = string.Empty;
info.Name4 = infoParameter.AddressInformation.Mail;
//"Entwicklung dakota.exchange@ownsoft.de";
return info;
return info;
}
private InfoNachrichtSLLA CreateDakotaInfoNachrichtSLLA(InfoParameterInvoiceItem infoParameter)

View File

@@ -0,0 +1,47 @@
using Dakota.Models.Infos;
using Dakota.Models.Segmente;
using Dakota.Models.Segmente.SLLA;
using System.Collections.Generic;
namespace Dakota.Models.Blocke
{
/// <summary>
/// ESK + 1-n BlockEinsatzPosition
/// entspricht einem einzelnen Einsatz/Hausbesuch
/// bei Häuslicher Krankenpflege (SLLA: C).
/// </summary>
internal class BlockEinsatz : Block
{
public SegmentSLLAESK SegmentSLLAESK { get; private set; }
public List<BlockEinsatzPosition> Positionen { get; private set; }
public BlockEinsatz()
{
SegmentSLLAESK = new SegmentSLLAESK();
Positionen = new List<BlockEinsatzPosition>();
}
public override List<Segment> GetAllSegments()
{
var res = new List<Segment> { SegmentSLLAESK };
foreach (var pos in Positionen)
res.AddRange(pos.GetSegments());
return res;
}
public override int GetUNHCount() => 0;
public void Apply(InfoAbrechnungsposition info)
{
// ESK: Datum + Uhrzeiten aus der Abrechnungsposition
SegmentSLLAESK.DatumLeistungserbringung.SetValue(info.DatumDerLeistungserbringung);
SegmentSLLAESK.UhrzeitBeginn.SetValue(info.Uhrzeit);
SegmentSLLAESK.UhrzeitEnde.SetValue(info.UhrzeitBis);
SegmentSLLAESK.Dauer.SetValue(info.Dauer > 0 ? info.Dauer.ToString() : null);
var posBlock = new BlockEinsatzPosition();
posBlock.Apply(info);
Positionen.Add(posBlock);
}
}
}

View File

@@ -0,0 +1,64 @@
using Dakota.Models.Infos;
using Dakota.Models.Segmente;
using Dakota.Models.Segmente.SLLA;
using System.Collections.Generic;
namespace Dakota.Models.Blocke
{
/// <summary>
/// EHK + optionale ELP-Segmente + optionales TXT-Segment
/// entspricht einer Abrechnungsposition innerhalb eines Einsatzes
/// bei Häuslicher Krankenpflege (SLLA: C).
/// </summary>
internal class BlockEinsatzPosition : Block
{
public SegmentSLLAEHK SegmentSLLAEHK { get; private set; }
/// <summary>
/// Einzelleistungen innerhalb einer Leistungspauschale (0-n je EHK).
/// Nur füllen, wenn eine Pauschale abgerechnet wird.
/// </summary>
public List<SegmentSLLAELP> SegmenteELP { get; private set; }
public SegmentSLLATXT SegmentSLLATXT { get; private set; }
public decimal AnzahlEinheit => SegmentSLLAEHK.AnzahlMenge.DecimalValue;
public decimal EinzelbetragAbrechnungsposition => SegmentSLLAEHK.EinzelbetragAbrechnungsposition.DecimalValue;
public BlockEinsatzPosition()
{
SegmentSLLAEHK = new SegmentSLLAEHK();
SegmenteELP = new List<SegmentSLLAELP>();
SegmentSLLATXT = new SegmentSLLATXT();
}
public override List<Segment> GetAllSegments()
{
var res = new List<Segment> { SegmentSLLAEHK };
res.AddRange(SegmenteELP);
res.Add(SegmentSLLATXT);
return res;
}
public override int GetUNHCount() => 0;
public void Apply(InfoAbrechnungsposition info)
{
SegmentSLLAEHK.Abrechnungscode.SetValue(info.Abrechnungscode);
SegmentSLLAEHK.Tarifkennzeichen.SetValue(info.Tarifkennzeichen);
SegmentSLLAEHK.ArtLeistung.SetValue(info.GetAbrechnungsposition());
SegmentSLLAEHK.AnzahlMenge.SetValue(info.AnzahlMenge);
SegmentSLLAEHK.EinzelbetragAbrechnungsposition.SetValue(info.EinzelbetragAbrechnungsposition);
SegmentSLLAEHK.GefahreneKilometer.SetValue(info.GefahreneKilometer);
// Beschäftigtennummer: Pflichtfeld Fallback auf Ersatzwert 999999999
var bsnr1 = !string.IsNullOrWhiteSpace(info.Beschäftigtennummer)
? info.Beschäftigtennummer
: "999999999";
SegmentSLLAEHK.Beschäftigtennummer1.SetValue(bsnr1);
SegmentSLLAEHK.Beschäftigtennummer2.SetValue(info.Beschäftigtennummer2);
SegmentSLLATXT.Text.SetValue(info.Text);
}
}
}

View File

@@ -0,0 +1,146 @@
using Dakota.Models.Infos;
using Dakota.Models.Segmente;
using Dakota.Models.Segmente.SLLA;
using System.Collections.Generic;
using System.Linq;
namespace Dakota.Models.Blocke
{
/// <summary>
/// Abrechnungsfall (INV … BES) für Häusliche Krankenpflege (SLLA: C).
/// Segmentfolge gem. TA § 302 Abs. 5.5.3.4:
/// INV, NAD, [IMG], ESK { EHK [ELP] [TXT] }+, ZHK [DIA] SKZ BES
/// </summary>
internal class BlockKlientHKP : Block
{
public SegmentSLLAINV SegmentSLLAINV { get; private set; }
public SegmentSLLANAD SegmentSLLANAD { get; private set; }
public SegmentSLLAIMG SegmentSLLAIMG { get; private set; }
/// <summary>Ein BlockEinsatz pro Einsatz/Hausbesuch (ESK + EHK-Positionen).</summary>
public List<BlockEinsatz> BlockEinsätze { get; private set; }
/// <summary>
/// ZHK Zusatzinfo Verordnung HK.
/// Laut TA 1-n je INV (eine je Verordnung); hier zunächst eine Verordnung pro Fall.
/// </summary>
public SegmentSLLAZHK SegmentSLLAZHK { get; private set; }
public List<BlockDiagnose> BlockDiagnose { get; private set; }
/// <summary>
/// SKZ ist bei C Pflicht (1-n je ZHK, laut TA zwingend zu übermitteln).
/// Liegen mehrere Kostenzusagen vor, ist das Segment zu wiederholen
/// hier wird zunächst eine Kostenzusage je Fall unterstützt.
/// </summary>
public SegmentSLLASKZ SegmentSLLASKZ { get; private set; }
public SegmentSLLABES SegmentSLLABES { get; private set; }
// Summen-Zugriff für NachrichtSLLA / SLGA
public decimal GesamtbetragBrutto => SegmentSLLABES.GesamtbetragBrutto.DecimalValue;
public BlockKlientHKP()
{
SegmentSLLAINV = new SegmentSLLAINV();
SegmentSLLANAD = new SegmentSLLANAD();
SegmentSLLAIMG = new SegmentSLLAIMG();
BlockEinsätze = new List<BlockEinsatz>();
SegmentSLLAZHK = new SegmentSLLAZHK();
BlockDiagnose = new List<BlockDiagnose>();
SegmentSLLASKZ = new SegmentSLLASKZ();
SegmentSLLABES = new SegmentSLLABES();
}
public override List<Segment> GetAllSegments()
{
var res = new List<Segment>();
res.Add(SegmentSLLAINV);
res.Add(SegmentSLLANAD);
// IMG nur wenn befüllt wie in BlockKlient gehandhabt
foreach (var einsatz in BlockEinsätze)
res.AddRange(einsatz.GetSegments());
res.Add(SegmentSLLAZHK);
foreach (var dia in BlockDiagnose)
res.AddRange(dia.GetSegments());
res.Add(SegmentSLLASKZ);
res.Add(SegmentSLLABES);
return res;
}
public override int GetUNHCount() => 0;
public void Apply(InfoAbrechnungsfall info)
{
// INV
SegmentSLLAINV.VersichertenNummer.SetValue(info.VersichtertenNummer);
SegmentSLLAINV.Versichertenstatus.SetValue(info.Versichertenstatus);
SegmentSLLAINV.Beleginformation.SetValue(info.Beleginformation);
SegmentSLLAINV.Belegnummer.SetValue(info.Belegnummer);
// NAD
SegmentSLLANAD.Vorname.SetValue(info.VersichtertenVorname);
SegmentSLLANAD.Nachname.SetValue(info.VersichtertenNachname);
SegmentSLLANAD.Geburtsdatum.SetValue(info.VersichtertenGeburtstag);
SegmentSLLANAD.StraßeNr.SetValue(info.VersichtertenStraßeNr);
SegmentSLLANAD.PLZ.SetValue(info.VersichtertenPLZ);
SegmentSLLANAD.Wohnort.SetValue(info.VersichtertenWohnort);
SegmentSLLANAD.Länderkennzeichen.SetValue(info.VersichtertenLanderkennung);
// ESK + EHK: je Abrechnungsposition ein eigener Einsatz
// (ein InvoiceItem = ein Einsatz; mehrere Positionen am selben Tag
// können durch den Aufrufer in einem BlockEinsatz zusammengefasst werden)
foreach (var posinfo in info.InfosAbrechnungsposition
.OrderBy(x => x.DatumDerLeistungserbringung))
{
var einsatz = new BlockEinsatz();
einsatz.Apply(posinfo);
BlockEinsätze.Add(einsatz);
}
// ZHK
SegmentSLLAZHK.Betriebsstättennummer.SetValue(
string.IsNullOrWhiteSpace(info.Betriebsstättennummer) ? "999999999" : info.Betriebsstättennummer);
SegmentSLLAZHK.LebenslangeArztnummer.SetValue(
string.IsNullOrWhiteSpace(info.LebenslangeArztnummer) ? "999999999" : info.LebenslangeArztnummer);
SegmentSLLAZHK.Verordnungsdatum.SetValue(info.Verordnungsdatum);
SegmentSLLAZHK.Unfallkennzeichen.SetValue(info.Unfallkennzeichen);
SegmentSLLAZHK.KennzeichenBVGSonstiges.SetValue(info.KennzeichenBVGSonstiges);
SegmentSLLAZHK.KennzeichenVerordnungsbesonderheiten.SetValue(info.KennzeichenVerordnungsbesonderheiten);
// DIA
if (info.DakotaInfoDiagnosen?.Any() == true)
{
foreach (var diagnose in info.DakotaInfoDiagnosen)
{
var block = new BlockDiagnose();
block.Apply(diagnose);
BlockDiagnose.Add(block);
}
}
// SKZ
SegmentSLLASKZ.Genehmigungskennzeichen.SetValue(info.Genehmigungskennzeichen);
SegmentSLLASKZ.DatumGenehmigung.SetValue(info.DatumDerGenehmigung);
SegmentSLLASKZ.ArtGenehmigung.SetValue(info.ArtDerGenehmigung);
// BES
CalculateSums();
}
private void CalculateSums()
{
var gesamtbrutto = BlockEinsätze
.SelectMany(e => e.Positionen)
.Sum(p => p.AnzahlEinheit * p.EinzelbetragAbrechnungsposition);
SegmentSLLABES.GesamtbetragBrutto.SetValue(gesamtbrutto);
}
}
}

View File

@@ -1,4 +1,4 @@
using Dakota.Models.Infos;
using Dakota.Models.Infos;
using Dakota.Models.Nachrichten;
using Dakota.Models.Schlüssels;
using Dakota.Models.Segmente;
@@ -55,6 +55,7 @@ namespace Dakota.Models.Blocke
return list;
}
public override int GetUNHCount()
{
var i = 0;
@@ -74,7 +75,14 @@ namespace Dakota.Models.Blocke
{
BlockKrankenkasse.Add(block);
}
public void Apply(InfoBlockKostentrager info)
/// <param name="info">Infoobjekt für diesen Kostenträger-Block.</param>
/// <param name="isHKP">
/// true = Häusliche Krankenpflege (Sammelgruppenschlüssel C).
/// Wird an BlockKrankenkasse.Apply weitergereicht, damit dort
/// NachrichtSLLA die ESK/EHK-Struktur (BlockKlientHKP) verwendet.
/// </param>
public void Apply(InfoBlockKostentrager info, bool isHKP = false)
{
if (IsSammelrechnung)
{
@@ -91,7 +99,7 @@ namespace Dakota.Models.Blocke
{
var blockkvkarte = new BlockKrankenkasse();
blockkvkarte.Apply(infoblock, IsSammelrechnung);
blockkvkarte.Apply(infoblock, IsSammelrechnung, isHKP);
Add(blockkvkarte);
}
@@ -106,7 +114,7 @@ namespace Dakota.Models.Blocke
private void CalculateSLGA()
{
Dictionary<string, decimal[]> segments = new Dictionary<string, decimal[]>();
var segments = new Dictionary<string, decimal[]>();
foreach (var block in BlockKrankenkasse)
{

View File

@@ -1,4 +1,4 @@
using Dakota.Models.Infos;
using Dakota.Models.Infos;
using Dakota.Models.Nachrichten;
using Dakota.Models.Schlüssels;
using Dakota.Models.Segmente;
@@ -13,24 +13,24 @@ using System.Threading.Tasks;
namespace Dakota.Models.Blocke
{
/// <summary>
/// Wiederhole folgenden Block je IK der Krankenkarte bzw der Verordnung
/// Wiederhole folgenden Block je IK der Krankenkarte bzw. der Verordnung
/// </summary>
internal class BlockKrankenkasse : Block
{
public SegmentUNH SegmentSLGAUNH { get; private set; }
public NachrichtSLGA NachrichtSLGA { get; private set; }
public SegmentUNT SegmentSLGAUNT { get; private set; }
public SegmentUNH SegmentSLLAUNH { get; private set; }
public NachrichtSLLA NachrichtSLLA { get; private set; }
public SegmentUNT SegmentSLLAUNT { get; private set; }
public SegmentUNH SegmentSLGAUNH { get; private set; }
public NachrichtSLGA NachrichtSLGA { get; private set; }
public SegmentUNT SegmentSLGAUNT { get; private set; }
public SegmentUNH SegmentSLLAUNH { get; private set; }
public NachrichtSLLA NachrichtSLLA { get; private set; }
public SegmentUNT SegmentSLLAUNT { get; private set; }
public BlockKrankenkasse()
{
SegmentSLGAUNH = new SegmentUNH();
NachrichtSLGA = new NachrichtSLGA();
NachrichtSLGA = new NachrichtSLGA();
SegmentSLGAUNT = new SegmentUNT(SLGASegmentLength);
SegmentSLLAUNH = new SegmentUNH();
NachrichtSLLA = new NachrichtSLLA();
NachrichtSLLA = new NachrichtSLLA();
SegmentSLLAUNT = new SegmentUNT(SLLASegmentLength);
}
@@ -45,7 +45,7 @@ namespace Dakota.Models.Blocke
public override List<Segment> GetAllSegments()
{
var list = new List<Segment>() { SegmentSLGAUNH };
var list = new List<Segment> { SegmentSLGAUNH };
list.AddRange(NachrichtSLGA.GetSegments());
list.Add(SegmentSLGAUNT);
@@ -61,14 +61,21 @@ namespace Dakota.Models.Blocke
return 2;
}
public void Apply(InfoBlockKrankenkasse blockinfo, bool isSammelrechnung)
/// <param name="blockinfo">Infoobjekt für diesen KV-Karten-Block.</param>
/// <param name="isSammelrechnung">true = Sammelrechnung.</param>
/// <param name="isHKP">
/// true = Häusliche Krankenpflege (Sammelgruppenschlüssel C).
/// Schaltet in NachrichtSLLA auf ESK/EHK-Struktur (BlockKlientHKP) um.
/// </param>
public void Apply(InfoBlockKrankenkasse blockinfo, bool isSammelrechnung, bool isHKP = false)
{
ApplySLGA(blockinfo.DakotaInfoSLGA);
ApplyNachrichtSLGA(blockinfo.DakotaInfoNachrichtSLGA, isSammelrechnung);
ApplySLLA(blockinfo.DakotaInfoSLLA);
ApplyNachrichtSLLA(blockinfo.DakotaInfoNachrichtSLLA);
ApplyNachrichtSLLA(blockinfo.DakotaInfoNachrichtSLLA, isHKP);
CalculateSLGA();
}
private void ApplySLGA(InfoNachricht info)
{
SegmentSLGAUNH.Nachrichtenreferenznummer.SetValue(info.Nachrichtenreferenznummer);
@@ -79,6 +86,7 @@ namespace Dakota.Models.Blocke
SegmentSLGAUNT.Nachrichtenreferenznummer.SetValue(info.Nachrichtenreferenznummer);
}
private void ApplyNachrichtSLGA(InfoNachrichtSLGA info, bool isSammelrechnung)
{
NachrichtSLGA.Apply(info, isSammelrechnung);
@@ -94,40 +102,35 @@ namespace Dakota.Models.Blocke
SegmentSLLAUNT.Nachrichtenreferenznummer.SetValue(info.Nachrichtenreferenznummer);
}
private void ApplyNachrichtSLLA(InfoNachrichtSLLA info)
private void ApplyNachrichtSLLA(InfoNachrichtSLLA info, bool isHKP)
{
NachrichtSLLA.Apply(info);
NachrichtSLLA.Apply(info, isHKP);
}
private void CalculateSLGA()
{
var sumseg = new decimal[3];
var segments = new Dictionary<string, decimal[]>();
Dictionary<string, decimal[]> segments = new Dictionary<string, decimal[]>();
// G/N: ENF-basierte Fälle
foreach (var fall in NachrichtSLLA.BlockKlienten)
{
var versicherten_status = fall.SegmentSLLAINV.Versichertenstatus.GetValue();
var schlüssel_summenstatus = SchlüsselSummenstatus.Parse(versicherten_status);
var status = schlüssel_summenstatus.Value;
AccumulateFall(
fall.SegmentSLLAINV.Versichertenstatus.GetValue(),
fall.GesamtbetragBrutto,
fall.GesamtbetragGesetzlicheZuzahlung + fall.GesamtbetragEigenanteil,
segments, sumseg);
}
if (!segments.ContainsKey(status))
{
segments.Add(status, new decimal[3]);
}
var segment = segments[status];
decimal bruttobetrag = fall.GesamtbetragBrutto;
decimal zuzahlung = fall.GesamtbetragGesetzlicheZuzahlung + fall.GesamtbetragEigenanteil;
decimal rechnungsbetrag = bruttobetrag - zuzahlung;
segment[0] += rechnungsbetrag;
segment[1] += bruttobetrag;
segment[2] += zuzahlung;
sumseg[0] += rechnungsbetrag;
sumseg[1] += bruttobetrag;
sumseg[2] += zuzahlung;
// C: ESK/EHK-basierte Fälle (Häusliche Krankenpflege)
foreach (var fall in NachrichtSLLA.BlockKlientenHKP)
{
AccumulateFall(
fall.SegmentSLLAINV.Versichertenstatus.GetValue(),
fall.GesamtbetragBrutto,
zuzahlung: 0, // HKP hat keine gesetzliche Zuzahlung im BES
segments, sumseg);
}
NachrichtSLGA.SegmentGES00.Status.SetValue(SchlüsselSummenstatus.Gesamtsumme);
@@ -138,7 +141,7 @@ namespace Dakota.Models.Blocke
foreach (var key in segments.Keys.OrderBy(x => x))
{
var segment = new SegmentSLGAGES();
var array = segments[key];
var array = segments[key];
segment.Status.SetValue(key);
segment.Gesamtrechnungsbetrag.SetValue(array[0]);
@@ -148,5 +151,29 @@ namespace Dakota.Models.Blocke
NachrichtSLGA.ListSegmentGES.Add(segment);
}
}
private void AccumulateFall(
string versichertenStatus,
decimal bruttobetrag,
decimal zuzahlung,
Dictionary<string, decimal[]> segments,
decimal[] sumseg)
{
var schlüssel = SchlüsselSummenstatus.Parse(versichertenStatus);
var status = schlüssel.Value;
if (!segments.ContainsKey(status))
segments.Add(status, new decimal[3]);
var seg = segments[status];
var rechnungsbetrag = bruttobetrag - zuzahlung;
seg[0] += rechnungsbetrag;
seg[1] += bruttobetrag;
seg[2] += zuzahlung;
sumseg[0] += rechnungsbetrag;
sumseg[1] += bruttobetrag;
sumseg[2] += zuzahlung;
}
}
}

View File

@@ -1,5 +1,6 @@
using Dakota.Models.Infos;
using Dakota.Models.Infos;
using Dakota.Models.Nachrichten;
using Dakota.Models.Schlüssels;
using Dakota.Models.Segmente;
using System;
using System.Collections.Generic;
@@ -10,13 +11,13 @@ using System.Threading.Tasks;
namespace Dakota.Models.Blocke
{
/// <summary>
/// Nutzdatendatei ohne Logik
/// Nutzdatendatei ohne Logik.
/// </summary>
internal class Nutzdatendatei : Block
{
public DakotaFile Parent { get; set; }
public SegmentUNB SegmentUNB { get; private set; }
public SegmentUNB SegmentUNB { get; private set; }
public List<BlockKostenträger> BlockKostenträger { get; private set; }
public SegmentUNZ SegmentUNZ { get; private set; }
@@ -43,6 +44,7 @@ namespace Dakota.Models.Blocke
return list;
}
public override int GetUNHCount()
{
int i = 0;
@@ -59,8 +61,13 @@ namespace Dakota.Models.Blocke
{
BlockKostenträger.Add(blockkosten);
}
public void Apply(InfoDateiNutzdaten info, bool isSammelrechnung)
{
// isHKP: true fuer Haeusliche Krankenpflege (Sammelgruppenschlüssel C)
var isHKP = info.Leistungsbereich?.Value ==
SchlüsselLeistungserbringerSammelgruppenschlussel.LeistungserbringerVonHäuslicherKrankenpflege.Value;
SegmentUNB.SyntaxKennung.SetValue(info.SyntaxKennung);
SegmentUNB.SyntaxVersionsnummer.SetValue(info.SyntaxVersion);
SegmentUNB.Absenderdatei.SetValue(info.Absenderbezeichnung);
@@ -75,9 +82,7 @@ namespace Dakota.Models.Blocke
foreach (var blockinfo in info.BlockKostentragers)
{
var block = new BlockKostenträger(isSammelrechnung);
block.Apply(blockinfo);
block.Apply(blockinfo, isHKP);
Add(block);
}

View File

@@ -1,9 +1,6 @@
using Dakota.Models.Schlüssels;
using Dakota.Models.Schlüssels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models.Infos
{
@@ -18,7 +15,7 @@ namespace Dakota.Models.Infos
public SchlüsselPosArtDerEinrichtung AbrechnungspositionArtDerEinrichtung { get; set; }
public SchlüsselPosBehandlungsart AbrechnungspositionBehandlungsart { get; set; }
public SchlüsselPosVergütungsart AbrechnungspositionVergütungsart { get; set; }
public decimal AnzahlMenge { get; set; }
public decimal EinzelbetragAbrechnungsposition { get; set; }
public DateTime? DatumDerLeistungserbringung { get; set; }
@@ -31,6 +28,19 @@ namespace Dakota.Models.Infos
public string Text { get; set; }
/// <summary>
/// Beschäftigtennummer nach § 293 Abs. 8 Satz 2 SGB V der Person,
/// die die Leistung erbracht hat (Pflichtfeld bei SLLA: C Häusliche Krankenpflege).
/// Bei fehlendem Wert Ersatzwert gemäß Anlage 3, Schlüsseltabelle 8.1.19 verwenden.
/// </summary>
public string Beschäftigtennummer { get; set; }
/// <summary>
/// Optionale Beschäftigtennummer einer zweiten Person (SLLA: C).
/// Wird zum Pflichtfeld, sobald zwei Personen die Leistung erbracht haben.
/// </summary>
public string Beschäftigtennummer2 { get; set; }
internal string GetAbrechnungsposition()
{
return AbrechnungspositionString ?? Abrechnungsposition.Value;

View File

@@ -1,80 +1,86 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Dakota.Models.Blocke;
using Dakota.Models.Infos;
using Dakota.Models.Schlüssels;
using Dakota.Models.Segmente;
using Dakota.Models.Segmente.SLLA;
namespace Dakota.Models.Nachrichten
{
/// <summary>
/// Leistungserbringer
/// </summary>
internal class NachrichtSLLA : Nachricht
{
/// <summary>
/// Das Segment enthält Informationen über den tatsächlichen
/// Leistungserbringer und das IK der Krankenkasse von der
/// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor.
/// </summary>
public SegmentSLLAFKT SegmentSLLAFKT { get; private set; }
/// <summary>
/// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum
/// </summary>
public SegmentSLLAREC SegmentSLLAREC { get; private set; }
/// <summary>
/// Abrechnungsfälle (INV - BES)
/// </summary>
public List<BlockKlient> BlockKlienten { get; set; }
/// <summary>
/// Leistungserbringer Abrechnungsdaten (SLLA).
/// Unterstützt G/N (ENF-basiert via BlockKlient) und
/// C Häusliche Krankenpflege (ESK/EHK-basiert via BlockKlientHKP).
/// </summary>
internal class NachrichtSLLA : Nachricht
{
public SegmentSLLAFKT SegmentSLLAFKT { get; private set; }
public SegmentSLLAREC SegmentSLLAREC { get; private set; }
/// <summary>Abrechnungsfälle für G/N (ENF-Struktur).</summary>
public List<BlockKlient> BlockKlienten { get; set; }
/// <summary>Abrechnungsfälle für C Häusliche Krankenpflege (ESK/EHK-Struktur).</summary>
public List<BlockKlientHKP> BlockKlientenHKP { get; set; }
public NachrichtSLLA()
{
SegmentSLLAFKT = new SegmentSLLAFKT();
SegmentSLLAREC = new SegmentSLLAREC();
public NachrichtSLLA()
{
SegmentSLLAFKT = new SegmentSLLAFKT();
SegmentSLLAREC = new SegmentSLLAREC();
BlockKlienten = new List<BlockKlient>();
BlockKlientenHKP = new List<BlockKlientHKP>();
}
BlockKlienten = new List<BlockKlient>();
}
public override List<Segment> GetAllSegments()
{
var list = new List<Segment> { SegmentSLLAFKT, SegmentSLLAREC };
public override List<Segment> GetAllSegments()
{
var list = new List<Segment>() { SegmentSLLAFKT, SegmentSLLAREC };
foreach (var block in BlockKlienten)
list.AddRange(block.GetSegments());
foreach (var block in BlockKlienten)
{
list.AddRange(block.GetSegments());
}
foreach (var block in BlockKlientenHKP)
list.AddRange(block.GetSegments());
return list;
}
return list;
}
public void Add(BlockKlient fall)
{
BlockKlienten.Add(fall);
}
public void Apply(InfoNachrichtSLLA info)
{
SegmentSLLAFKT.Verarbeitungskennzeichen.SetValue(info.Verarbeitungskennzeichen);
SegmentSLLAFKT.IKLeistungserbringers.SetValue(info.IKLeistungserbringer);
SegmentSLLAFKT.IKKostenträgers.SetValue(info.IKKostentrager);
SegmentSLLAFKT.IKKrankenkasse.SetValue(info.IKKrankenkasse);
//SegmentSLLAFKT.IKRechnungsstellers.SetValue(info.IKAbsender);
public void Add(BlockKlient fall) => BlockKlienten.Add(fall);
public void Add(BlockKlientHKP fall) => BlockKlientenHKP.Add(fall);
foreach (var infofall in info.Abrechnungsfalle.OrderBy(x => x.InfosAbrechnungsposition.Min(y => y.DatumDerLeistungserbringung)))
{
var block = new BlockKlient();
/// <summary>
/// Befüllt die Nachricht. Für Häusliche Krankenpflege (Sammelgruppenschlüssel C)
/// isHKP = true übergeben dann wird BlockKlientHKP (ESK/EHK) statt BlockKlient (ENF) verwendet.
/// </summary>
public void Apply(InfoNachrichtSLLA info, bool isHKP = false)
{
SegmentSLLAFKT.Verarbeitungskennzeichen.SetValue(info.Verarbeitungskennzeichen);
SegmentSLLAFKT.IKLeistungserbringers.SetValue(info.IKLeistungserbringer);
SegmentSLLAFKT.IKKostenträgers.SetValue(info.IKKostentrager);
SegmentSLLAFKT.IKKrankenkasse.SetValue(info.IKKrankenkasse);
block.Apply(infofall);
foreach (var infofall in info.Abrechnungsfalle
.OrderBy(x => x.InfosAbrechnungsposition.Min(y => y.DatumDerLeistungserbringung)))
{
if (isHKP)
{
var block = new BlockKlientHKP();
block.Apply(infofall);
Add(block);
}
else
{
var block = new BlockKlient();
block.Apply(infofall);
Add(block);
}
}
Add(block);
}
SegmentSLLAREC.SammelRechnungsnummer.SetValue(info.Rechnungsnummer);
SegmentSLLAREC.EinzelRechnungsnummer.SetValue("0");
SegmentSLLAREC.Rechnungsdatum.SetValue(info.Rechnungsdatum);
SegmentSLLAREC.Rechnungsart.SetValue(info.Rechnungsart);
}
}
SegmentSLLAREC.SammelRechnungsnummer.SetValue(info.Rechnungsnummer);
SegmentSLLAREC.EinzelRechnungsnummer.SetValue("0");
SegmentSLLAREC.Rechnungsdatum.SetValue(info.Rechnungsdatum);
SegmentSLLAREC.Rechnungsart.SetValue(info.Rechnungsart);
}
}
}

View File

@@ -0,0 +1,72 @@
using Dakota.Models.Daten;
using System.Collections.Generic;
namespace Dakota.Models.Segmente.SLLA
{
/// <summary>
/// EHK Einzelfallnachweis Häusliche Krankenpflege (SLLA: C).
/// Das Segment ist je Einsatz/Hausbesuch 1-n mal zu übermitteln.
/// Das letzte EHK kennzeichnet das Einsatzende.
/// </summary>
internal class SegmentSLLAEHK : Segment
{
/// <summary>Datenelementgruppe Abrechnungscode:Tarifkennzeichen.</summary>
public Datenelementgruppe Leistungserbringergruppe { get; private set; }
public Datenelement Abrechnungscode { get; private set; }
public Datenelement Tarifkennzeichen { get; private set; }
/// <summary>Zu vergütende Abrechnungspositionsnummer (Anlage 3, Abschnitt 8.2.4).</summary>
public Datenelement ArtLeistung { get; private set; }
/// <summary>Anzahl der Abrechnungspositionen. Max. ..4,2.</summary>
public DatenelementDecimal AnzahlMenge { get; private set; }
/// <summary>
/// Einzelpreis inkl. MwSt. Als Einzelpreis ist immer der vereinbarte
/// Preis einschließlich Mehrwertsteuer einer Abrechnungsposition zu verstehen.
/// </summary>
public DatenelementDecimal EinzelbetragAbrechnungsposition { get; private set; }
/// <summary>Anzahl der gefahrenen Kilometer (Kann-Feld).</summary>
public DatenelementDecimal GefahreneKilometer { get; private set; }
/// <summary>
/// Beschäftigtennummer nach § 293 Abs. 8 Satz 2 SGB V der Person,
/// die die Leistung erbracht hat. Pflichtfeld bei fehlendem Wert
/// ist ein Ersatzwert gemäß Anlage 3, Schlüsseltabelle 8.1.19 anzugeben.
/// </summary>
public Datenelement Beschäftigtennummer1 { get; private set; }
/// <summary>
/// Beschäftigtennummer der zweiten Person (Kann-Feld; wird zum
/// Muss-Feld, sobald eine zweite Person die Leistung erbracht hat).
/// </summary>
public Datenelement Beschäftigtennummer2 { get; private set; }
public SegmentSLLAEHK() : base(Feldart.Muss)
{
Leistungserbringergruppe = new Datenelementgruppe("Leistungserbringergruppe", 2);
Abrechnungscode = Leistungserbringergruppe.Datenelemente[0] = new Datenelement("Abrechnungscode", 2, Feldart.Muss);
Tarifkennzeichen = Leistungserbringergruppe.Datenelemente[1] = new Datenelement("Tarifkennzeichen", 5, Feldart.Muss);
ArtLeistung = new Datenelement("ArtLeistung", 0, 10, Feldart.Muss);
AnzahlMenge = new DatenelementDecimal("AnzahlMenge", 3, 7, Feldart.Muss);
EinzelbetragAbrechnungsposition = new DatenelementDecimal("EinzelbetragAbrechnungsposition", 3, 13, Feldart.Muss);
GefahreneKilometer = new DatenelementDecimal("GefahreneKilometer", 0, 6, Feldart.Kann);
Beschäftigtennummer1 = new Datenelement("Beschäftigtennummer1", 9, Feldart.Muss);
Beschäftigtennummer2 = new Datenelement("Beschäftigtennummer2", 9, Feldart.Kann);
}
public override string GetHead() => "EHK";
public override List<Dateneinheit> GetBody()
=> new List<Dateneinheit>
{
Leistungserbringergruppe,
ArtLeistung,
AnzahlMenge,
EinzelbetragAbrechnungsposition,
GefahreneKilometer,
Beschäftigtennummer1,
Beschäftigtennummer2
};
}
}

View File

@@ -0,0 +1,33 @@
using Dakota.Models.Daten;
using System.Collections.Generic;
namespace Dakota.Models.Segmente.SLLA
{
/// <summary>
/// ELP Erbrachte unterschiedliche Leistungen je Leistungspauschale (SLLA: C).
/// Das Segment ist je EHK 0-n mal zu übermitteln.
/// Wird eine Leistungspauschale abgerechnet, sind hier die im Rahmen
/// der Leistungspauschale erbrachten Einzelleistungen zwingend anzugeben.
/// </summary>
internal class SegmentSLLAELP : Segment
{
/// <summary>
/// Abrechnungspositionsnummer der erbrachten Einzelleistung
/// (Anlage 3, Abschnitt 8.2.4).
/// </summary>
public Datenelement Abrechnungspositionsnummer { get; private set; }
/// <summary>Anzahl der Abrechnungspositionen. Max. ..4,2.</summary>
public DatenelementDecimal AnzahlMenge { get; private set; }
public SegmentSLLAELP() : base(Feldart.Kann)
{
Abrechnungspositionsnummer = new Datenelement("Abrechnungspositionsnummer", 0, 10, Feldart.Muss);
AnzahlMenge = new DatenelementDecimal("AnzahlMenge", 3, 7, Feldart.Muss);
}
public override string GetHead() => "ELP";
public override List<Dateneinheit> GetBody()
=> new List<Dateneinheit> { Abrechnungspositionsnummer, AnzahlMenge };
}
}

View File

@@ -0,0 +1,37 @@
using Dakota.Models.Daten;
using System.Collections.Generic;
namespace Dakota.Models.Segmente.SLLA
{
/// <summary>
/// ESK Informationen zum Einsatz/Hausbesuch (SLLA: C Häusliche Krankenpflege).
/// Das Segment ist je Abrechnungsfall 1-n mal zu übermitteln.
/// Gilt als Beginn-Segment für einen Einsatz/Hausbesuch.
/// </summary>
internal class SegmentSLLAESK : Segment
{
/// <summary>Tag der Leistungserbringung (JJJJMMTT).</summary>
public DatenelementDateTime DatumLeistungserbringung { get; private set; }
/// <summary>Beginn des Einsatzes (HHMM). Wertebereich HH 0023, MM 0059.</summary>
public DatenelementDateTime UhrzeitBeginn { get; private set; }
/// <summary>Ende des Einsatzes (HHMM). Kann-Feld.</summary>
public DatenelementDateTime UhrzeitEnde { get; private set; }
/// <summary>Zeitangabe in Minuten. Kann-Feld.</summary>
public Datenelement Dauer { get; private set; }
public SegmentSLLAESK() : base(Feldart.Muss)
{
DatumLeistungserbringung = new DatenelementDateTime("DatumLeistungserbringung", 8, "yyyyMMdd", Feldart.Muss);
UhrzeitBeginn = new DatenelementDateTime("UhrzeitBeginn", 4, "HHmm", Feldart.Muss);
UhrzeitEnde = new DatenelementDateTime("UhrzeitEnde", 4, "HHmm", Feldart.Kann);
Dauer = new Datenelement("Dauer", 0, 4, Feldart.Kann);
}
public override string GetHead() => "ESK";
public override List<Dateneinheit> GetBody()
=> new List<Dateneinheit> { DatumLeistungserbringung, UhrzeitBeginn, UhrzeitEnde, Dauer };
}
}

View File

@@ -0,0 +1,59 @@
using Dakota.Models.Daten;
using System.Collections.Generic;
namespace Dakota.Models.Segmente.SLLA
{
/// <summary>
/// ZHK Zusatzinfo Verordnung für Häusliche Krankenpflege (SLLA: C).
/// Das Segment ist für jede Verordnung zu übermitteln.
/// </summary>
internal class SegmentSLLAZHK : Segment
{
/// <summary>
/// Betriebsstättennummer aus der Verordnung (zwingend).
/// Falls nicht vorhanden: 999999999 angeben.
/// </summary>
public Datenelement Betriebsstättennummer { get; private set; }
/// <summary>
/// Lebenslange Arztnummer aus der Verordnung (zwingend).
/// Falls nicht vorhanden: 999999999 angeben.
/// Auffüllen auf 9 Stellen ist unzulässig.
/// </summary>
public Datenelement LebenslangeArztnummer { get; private set; }
/// <summary>Verordnungsdatum (JJJJMMTT).</summary>
public DatenelementDateTime Verordnungsdatum { get; private set; }
/// <summary>Siehe Schlüssel Unfall/Sonstiges Anlage 3 Abschnitt 8.1.2.</summary>
public Datenelement Unfallkennzeichen { get; private set; }
/// <summary>Siehe Schlüssel BVG/SER Anlage 3 Abschnitt 8.1.2.1.</summary>
public Datenelement KennzeichenBVGSonstiges { get; private set; }
/// <summary>Siehe Schlüssel Kennzeichen Verordnungsbesonderheiten Anlage 3 Abschnitt 8.1.11.</summary>
public Datenelement KennzeichenVerordnungsbesonderheiten { get; private set; }
public SegmentSLLAZHK() : base(Feldart.Muss)
{
Betriebsstättennummer = new Datenelement("Betriebsstättennummer", 0, 9, Feldart.Muss);
LebenslangeArztnummer = new Datenelement("LebenslangeArztnummer", 0, 9, Feldart.Muss);
Verordnungsdatum = new DatenelementDateTime("Verordnungsdatum", 8, "yyyyMMdd", Feldart.Muss);
Unfallkennzeichen = new Datenelement("Unfallkennzeichen", 1, Feldart.Kann);
KennzeichenBVGSonstiges = new Datenelement("KennzeichenBVGSonstiges", 1, Feldart.Kann);
KennzeichenVerordnungsbesonderheiten = new Datenelement("KennzeichenVerordnungsbesonderheiten", 1, Feldart.Kann);
}
public override string GetHead() => "ZHK";
public override List<Dateneinheit> GetBody()
=> new List<Dateneinheit>
{
Betriebsstättennummer,
LebenslangeArztnummer,
Verordnungsdatum,
Unfallkennzeichen,
KennzeichenBVGSonstiges,
KennzeichenVerordnungsbesonderheiten
};
}
}

View File

@@ -234,6 +234,8 @@
<Compile Include="Access\UserDAO.cs" />
<Compile Include="ASPHibernateSessionManager.cs" />
<Compile Include="DefaultHibernateSessionManager.cs" />
<Compile Include="Entities\AiPromptbausteinRoutine.cs" />
<Compile Include="Entities\AiPromptbausteinRoutineStep.cs" />
<Compile Include="Entities\AiUserSetting.cs" />
<Compile Include="Entities\AiVoiceData.cs" />
<Compile Include="Entities\OvertimeHistory.cs" />

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using BS.Shared.DataContracts.Feature.AI;
namespace BeWo.Data.Entities
{
public class AiPromptbausteinRoutine : BeWoEntityBase
{
public AiPromptbausteinRoutine()
{
_Tid = TableID.AiPromptbausteinRoutine;
}
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual long? ParentFolderOid { get; set; }
public virtual long CreatorOid { get; set; }
public virtual bool IsPublic { get; set; }
public virtual int Position { get; set; }
public virtual bool IsFavorite { get; set; }
public virtual AiActionType ActionType { get; set; }
public virtual bool CanEdit { get; set; }
public virtual List<AiPromptbausteinRoutineStep> Steps { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using BS.Shared;
using BS.Shared.Core;
namespace BeWo.Data.Entities
{
public class AiPromptbausteinRoutineStep : BeWoEntityBase
{
public AiPromptbausteinRoutineStep()
{
_Tid = TableID.AiPromptbausteinRoutineStep;
}
public virtual int Position { get; set; }
public virtual AiPromptbausteinPrompt PromptReference { get; set; }
public virtual long ReferenceVersion { get; set; }
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -24,6 +24,7 @@ using BeWo.Service.DCEntityMapper;
using BS.Shared.ReportRequests;
using SecurityUtils = BeWo.Service.Security.SecurityUtils;
using DevExpress.DataProcessing;
namespace Host
{
@@ -784,8 +785,33 @@ namespace Host
private XtraReport CreateJahresbericht()
{
int year = int.Parse(Request.Params["y"]);
long? cbOid = null;
int year = DateTime.Now.Year - 1;
if (Request.Params["y"] != null)
{
year = int.Parse(Request.Params["y"]);
}
DateTime start = new DateTime(year, 1, 1);
DateTime end = new DateTime(year, 12, 31);
bool showOnlyApprovedSupportConcepts = true;
bool stichtagsbezogen = true;
if (Request.Params["start"] != null)
{
start = DateTime.Parse(Request.Params["start"]);
}
if (Request.Params["end"] != null)
{
end = DateTime.Parse(Request.Params["end"]);
}
if (Request.Params["appr"] != null)
{
showOnlyApprovedSupportConcepts = "0".Equals(Request.Params["appr"]) ? false : true;
}
if (Request.Params["stichtag"] != null)
{
stichtagsbezogen = "0".Equals(Request.Params["stichtag"]) ? false : true;
}
long? cbOid = null;
if (Request.Params["cb"] != null)
cbOid = long.Parse(Request.Params["cb"]);
@@ -797,7 +823,19 @@ namespace Host
if (Request.Params["art"] != null)
artOid = long.Parse(Request.Params["art"]);
return reportCreator.CreateJahresberichtReport(year, cbOid, teamOid, artOid);
var config = new AnnualReportConfigDC
{
CostbearerOid = cbOid,
TeamOid = teamOid,
CustomerCareTypeValueListEntryOid = artOid,
StartDate = start,
EndDate = end,
ShowOnlyApprovedSupportConcepts = showOnlyApprovedSupportConcepts,
StichtagsbezogenAuswerten = stichtagsbezogen
};
return reportCreator.CreateJahresberichtReport(config);
}
private XtraReport CreateEmployeeDataReport()

View File

@@ -420,6 +420,7 @@
<add key="OllamaUrl" value="https://ai2.ownsoft.de" />
<add key="Ollama2Url" value="https://ai3.ownsoft.de" />
<add key="AiPromptsUrl" value="https://test2.evplaner.de" />
<add key="XRechnungApiUrl" value="https://test2.evplaner.de/xrg/"/>
<add key="StoredTenantFilesFolderPath" value="C:\BeWoPlaner\StoredTenantFiles"/>

View File

@@ -439,6 +439,7 @@
<add key="OllamaUrl" value="https://ai2.ownsoft.de" />
<add key="Ollama2Url" value="https://ai3.ownsoft.de" />
<add key="AiPromptsUrl" value="https://test2.evplaner.de" />
<add key="XRechnungApiUrl" value="https://test2.evplaner.de/xrg/" />
<add key="StoredFilesFolderPath" value="C:\BeWoPlaner\StoredFiles" />

View File

@@ -0,0 +1,42 @@
INSERT INTO `.executedscripts`
VALUES ('Changes_2026-04-17 AiPromptroutine', CURDATE());
CREATE TABLE `aipromptroutinestep` (
`Oid` bigint NOT NULL AUTO_INCREMENT,
`InsTs` datetime DEFAULT NULL,
`InsUser` varchar(256) DEFAULT NULL,
`Notice` varchar(1024) DEFAULT NULL,
`Tid` int DEFAULT NULL,
`UdpUser` varchar(256) DEFAULT NULL,
`Version` bigint DEFAULT NULL,
`IsActive` tinyint DEFAULT NULL,
`SystemEntryID` int DEFAULT NULL,
`Position` int,
`PromptReferenceOid` bigint DEFAULT NULL,
`PromptReferenceVersion` bigint,
PRIMARY KEY (`Oid`),
CONSTRAINT `FK_AIPROMPTROUTINESTEP_PROMPT` FOREIGN KEY (`PromptReferenceOid`) REFERENCES `aipromptbausteinprompt` (`Oid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
CREATE TABLE `aipromptroutine` (
`Oid` bigint NOT NULL AUTO_INCREMENT,
`InsTs` datetime DEFAULT NULL,
`InsUser` varchar(256) DEFAULT NULL,
`Notice` varchar(1024) DEFAULT NULL,
`Tid` int DEFAULT NULL,
`UdpUser` varchar(256) DEFAULT NULL,
`Version` bigint DEFAULT NULL,
`IsActive` tinyint DEFAULT NULL,
`SystemEntryID` int DEFAULT NULL,
`Title` varchar(255),
`Description` varchar(255),
`ParentFolderOid` bigint DEFAULT NULL,
`CreatorOid` bigint,
`IsPublic` tinyint,
`Position` int,
`IsFavorite` tinyint,
`ActionType` int,
PRIMARY KEY (`Oid`),
CONSTRAINT `FK_AIPROMPTROUTINE_EMPLOYEE` FOREIGN KEY (`CreatorOid`) REFERENCES `employee` (`Oid`),
CONSTRAINT `FK_AIPROMPTROUTINE_PARENT` FOREIGN KEY (`ParentFolderOid`) REFERENCES `aipromptbausteinfolder` (`Oid`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;

View File

@@ -0,0 +1,8 @@
INSERT INTO `.executedscripts`
VALUES ('Changes_2026-04-20 AiPromptroutine 2', CURDATE());
ALTER TABLE `aipromptroutine`
RENAME TO `aipromptbauteinroutine` ;
ALTER TABLE `aipromptroutinestep`
RENAME TO `aipromptbausteinroutinestep` ;

View File

@@ -0,0 +1,51 @@
-- Wie viel Prozent der Stunden wurden bei Leistungskategorie Qualifiziert durch Assistenzkraft erbracht und andersrum
-- 3432911735 (APP4) Caritasverband GünzburgNeuUlm
-- *** Mapping (kundenspezifisch anpassen) ***
-- Leistungskategorie 'Qualifiziert' -> passende Qualifikation: Q1, Q2
-- Leistungskategorie 'Unterstützend' -> passende Qualifikation: Q3, Q4
SELECT
p.LastName AS 'Nachname',
p.Firstname AS 'Vorname',
c2s.ApprovedStartDate AS 'Bewilligt von',
c2s.ApprovedEndDate AS 'Bewilligt bis',
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Qualifiziert durch Q1/Q2',
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Qualifiziert durch Q3/Q4',
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Unterstützend durch Q1/Q2',
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Unterstützend durch Q3/Q4',
ROUND(SUM(CASE WHEN q12.EmployeeOid IS NULL AND q34.EmployeeOid IS NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Ohne Qualifikation',
ROUND(SUM(sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount)) / 60, 2) AS 'Gesamt (Std)',
-- Unterqualifiziert: Qualifiziert durch Q3/Q4 in %
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END)
/ NULLIF(SUM(CASE WHEN scat.Name = 'Qualifiziert' THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END), 0) * 100, 1) AS '% Unterqualifiziert',
-- Überqualifiziert: Unterstützend durch Q1/Q2 in %
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END)
/ NULLIF(SUM(CASE WHEN scat.Name = 'Unterstützend' THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END), 0) * 100, 1) AS '% Überqualifiziert'
FROM servicerecord sr
JOIN costbearer2supportconcept c2s ON sr.CostBearer2SupportConceptOid = c2s.Oid
JOIN supportconcept sc ON c2s.SupportConceptOid = sc.Oid
JOIN customer c ON sc.CustomerOid = c.Oid
JOIN person p ON c.PersonOid = p.Oid
JOIN servicedescription sd ON sd.Oid = sr.ServiceDescriptionOid
JOIN servicecategory scat ON scat.Oid = sd.ServiceCategoryOid
-- *** Mapping (kundenspezifisch anpassen) ***
LEFT JOIN (
SELECT DISTINCT v2o.ObjectOid AS EmployeeOid
FROM valuelistentry2object v2o
JOIN valuelistentry vle ON vle.Oid = v2o.ValuelistEntryOid
WHERE v2o.ObjectTid = 2 AND v2o.IsActive = 1 AND vle.Type = 5 AND vle.IsActive = 1 AND vle.Value IN ('Q1', 'Q2') -- Qualifikationen für 'Qualifiziert'
) q12 ON q12.EmployeeOid = sr.EmployeeOid
LEFT JOIN (
SELECT DISTINCT v2o.ObjectOid AS EmployeeOid
FROM valuelistentry2object v2o
JOIN valuelistentry vle ON vle.Oid = v2o.ValuelistEntryOid
WHERE v2o.ObjectTid = 2 AND v2o.IsActive = 1 AND vle.Type = 5 AND vle.IsActive = 1 AND vle.Value IN ('Q3', 'Q4') -- Qualifikationen für 'Unterstützend'
) q34 ON q34.EmployeeOid = sr.EmployeeOid
-- *** Ende Mapping ***
WHERE scat.Billable = 1 AND c2s.ApprovedStartDate <= CURDATE() AND (c2s.ApprovedEndDate >= CURDATE() OR c2s.ApprovedEndDate IS NULL)
-- AND sr.StartDate >= ':Von' AND sr.StartDate < ':Bis'
GROUP BY p.LastName, p.Firstname, c2s.ApprovedStartDate, c2s.ApprovedEndDate
ORDER BY p.LastName;

View File

@@ -0,0 +1,49 @@
-- Query-Idee für Herrn Ferchland - 2385915144 (APP6)
-- Hilfepläne mit aktuellen Bewilligungen (max 4 Bew mit Leistungskategorie u Stunden / Woche)
SELECT
p.LastName AS Nachname,
p.FirstName AS Vorname,
o.`Name` AS Kostentraeger,
cb2sc.RequestedStartDate AS 'Beantragt von',
cb2sc.RequestedEndDate AS 'Beantragt bis',
cb2sc.ApprovedStartDate AS 'Bewilligt von',
cb2sc.ApprovedEndDate AS 'Bewilligt bis',
MAX(CASE WHEN scap.rn = 1 THEN cat1.Name END) AS 'Bewilligung 1',
MAX(CASE WHEN scap.rn = 1 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 1',
MAX(CASE WHEN scap.rn = 1 THEN scap.Notice END) AS 'Bemerkungen 1',
MAX(CASE WHEN scap.rn = 2 THEN cat2.Name END) AS 'Bewilligung 2',
MAX(CASE WHEN scap.rn = 2 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 2',
MAX(CASE WHEN scap.rn = 2 THEN scap.Notice END) AS 'Bemerkungen 2',
MAX(CASE WHEN scap.rn = 3 THEN cat3.Name END) AS 'Bewilligung 3',
MAX(CASE WHEN scap.rn = 3 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 3',
MAX(CASE WHEN scap.rn = 3 THEN scap.Notice END) AS 'Bemerkungen 3'
FROM `person` p
INNER JOIN `customer` c ON p.Oid = c.PersonOid
LEFT JOIN team2customer t2c ON c.Oid = t2c.CustomerOid
LEFT JOIN team t ON t2c.TeamOid = t.Oid
INNER JOIN `supportconcept` sc ON c.Oid = sc.CustomerOid
INNER JOIN `costbearer2supportconcept` cb2sc ON sc.Oid = cb2sc.SupportConceptOid
INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid`
INNER JOIN `organisation` o ON cb.`Oid` = o.`CostBearerOid`
INNER JOIN (
SELECT s1.Oid, s1.CostBearer2SupportConceptOid, s1.ApprovedBEPerInterval,
s1.Start, s1.EndDate, s1.Notice, s1.ServiceCategoryOid,
COUNT(s2.Oid) + 1 AS rn
FROM `supportconceptapprovalperiod` s1
LEFT JOIN `supportconceptapprovalperiod` s2
ON s1.CostBearer2SupportConceptOid = s2.CostBearer2SupportConceptOid
AND s1.Start <= CURDATE()
AND (s1.EndDate IS NULL OR s1.EndDate >= CURDATE())
AND (s2.Start < s1.Start OR (s2.Start = s1.Start AND s2.Oid < s1.Oid))
WHERE s1.Start <= CURDATE()
AND (s1.EndDate IS NULL OR s1.EndDate >= CURDATE())
GROUP BY s1.Oid, s1.CostBearer2SupportConceptOid, s1.ApprovedBEPerInterval,
s1.Start, s1.EndDate, s1.ServiceCategoryOid
) scap ON cb2sc.Oid = scap.CostBearer2SupportConceptOid
LEFT JOIN servicecategory cat1 ON scap.ServiceCategoryOid = cat1.Oid AND scap.rn = 1
LEFT JOIN servicecategory cat2 ON scap.ServiceCategoryOid = cat2.Oid AND scap.rn = 2
LEFT JOIN servicecategory cat3 ON scap.ServiceCategoryOid = cat3.Oid AND scap.rn = 3
WHERE c.IsActive = 1 AND sc.IsActive = 1
GROUP BY p.Oid, p.LastName, p.FirstName, p.DateOfBirth, o.`Name`, cb2sc.ApprovedStartDate, cb2sc.ApprovedEndDate
ORDER BY t.Name, p.LastName;

View File

@@ -0,0 +1,78 @@
-- Query- für Herrn Ferchland - 2385915144 (APP6)
-- Hilfepläne mit aktuellen Bewilligungen (max 3 Bew mit Leistungskategorie u Stunden / Woche + Betreuern)
SELECT
base.Nachname, base.Vorname, base.Kostentraeger, base.`Bewilligt von`, base.`Bewilligt bis`, base.`Bewilligung 1`, base.`Stunden 1`,
-- Betreuer für SCAP 1
(SELECT GROUP_CONCAT(CONCAT(p2.`FirstName`, ' ', p2.`LastName`) ORDER BY scap2e.EmployeeOid SEPARATOR ', ')
FROM supportconceptapprovalperiod2employee scap2e
INNER JOIN `employee` e ON scap2e.`EmployeeOid` = e.`Oid`
INNER JOIN `person` p2 ON e.`PersonOid` = p2.`Oid`
WHERE scap2e.SupportConceptApprovalPeriodOid = base.scap1_oid
) AS 'Betreuer 1',
base.`Bewilligung 2`, base.`Stunden 2`,
-- Betreuer für SCAP 2
(SELECT GROUP_CONCAT(
CONCAT(p2.`FirstName`, ' ', p2.`LastName`)
ORDER BY scap2e.EmployeeOid SEPARATOR ', ')
FROM supportconceptapprovalperiod2employee scap2e
INNER JOIN `employee` e ON scap2e.`EmployeeOid` = e.`Oid`
INNER JOIN `person` p2 ON e.`PersonOid` = p2.`Oid`
WHERE scap2e.SupportConceptApprovalPeriodOid = base.scap2_oid
) AS 'Betreuer 2',
base.`Bewilligung 3`, base.`Stunden 3`,
-- Betreuer für SCAP 3
(SELECT GROUP_CONCAT(
CONCAT(p2.`FirstName`, ' ', p2.`LastName`)
ORDER BY scap2e.EmployeeOid SEPARATOR ', ')
FROM supportconceptapprovalperiod2employee scap2e
INNER JOIN `employee` e ON scap2e.`EmployeeOid` = e.`Oid`
INNER JOIN `person` p2 ON e.`PersonOid` = p2.`Oid`
WHERE scap2e.SupportConceptApprovalPeriodOid = base.scap3_oid
) AS 'Betreuer 3'
FROM (
-- Kernabfrage Bewilligungen ohne Betreuuer
SELECT
p.LastName AS Nachname,
p.FirstName AS Vorname,
o.`Name` AS Kostentraeger,
cb2sc.ApprovedStartDate AS 'Bewilligt von',
cb2sc.ApprovedEndDate AS 'Bewilligt bis',
MAX(CASE WHEN scap.rn = 1 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 1',
MAX(CASE WHEN scap.rn = 1 THEN CONCAT(DATE_FORMAT(scap.Start, '%d.%m.%Y'), ' - ', DATE_FORMAT(scap.EndDate, '%d.%m.%Y'), ' ', cat1.Name) END) AS 'Bewilligung 1',
MAX(CASE WHEN scap.rn = 2 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 2',
MAX(CASE WHEN scap.rn = 2 THEN CONCAT(DATE_FORMAT(scap.Start, '%d.%m.%Y'), ' - ', DATE_FORMAT(scap.EndDate, '%d.%m.%Y'), ' ', cat2.Name) END) AS 'Bewilligung 2',
MAX(CASE WHEN scap.rn = 3 THEN ROUND(scap.ApprovedBEPerInterval, 2) END) AS 'Stunden 3',
MAX(CASE WHEN scap.rn = 3 THEN CONCAT(DATE_FORMAT(scap.Start, '%d.%m.%Y'), ' - ', DATE_FORMAT(scap.EndDate, '%d.%m.%Y'), ' ', cat3.Name) END) AS 'Bewilligung 3',
-- Hilfsspalten: OIDs der 4 SCRAPs für die Betreuer-Subqueries
MAX(CASE WHEN scap.rn = 1 THEN scap.Oid END) AS scap1_oid,
MAX(CASE WHEN scap.rn = 2 THEN scap.Oid END) AS scap2_oid,
MAX(CASE WHEN scap.rn = 3 THEN scap.Oid END) AS scap3_oid
FROM `person` p
INNER JOIN `customer` c ON p.Oid = c.PersonOid
LEFT JOIN team2customer t2c ON c.Oid = t2c.CustomerOid
LEFT JOIN team t ON t2c.TeamOid = t.Oid
INNER JOIN `supportconcept` sc ON c.Oid = sc.CustomerOid
INNER JOIN `costbearer2supportconcept` cb2sc ON sc.Oid = cb2sc.SupportConceptOid
INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid`
INNER JOIN `organisation` o ON cb.`Oid` = o.`CostBearerOid`
INNER JOIN (
SELECT s1.Oid, s1.CostBearer2SupportConceptOid, s1.ApprovedBEPerInterval,
s1.Start, s1.EndDate, s1.ServiceCategoryOid, s1.Notice,
COUNT(s2.Oid) + 1 AS rn
FROM `supportconceptapprovalperiod` s1
LEFT JOIN `supportconceptapprovalperiod` s2
ON s1.CostBearer2SupportConceptOid = s2.CostBearer2SupportConceptOid
-- AND s1.Start <= CURDATE() AND (s1.EndDate IS NULL OR s1.EndDate >= CURDATE())
AND (s2.Start < s1.Start OR (s2.Start = s1.Start AND s2.Oid < s1.Oid))
-- WHERE s1.Start <= CURDATE() AND (s1.EndDate IS NULL OR s1.EndDate >= CURDATE())
GROUP BY s1.Oid, s1.CostBearer2SupportConceptOid, s1.ApprovedBEPerInterval, s1.Start, s1.EndDate, s1.ServiceCategoryOid, s1.Notice
) scap ON cb2sc.Oid = scap.CostBearer2SupportConceptOid
LEFT JOIN servicecategory cat1 ON scap.ServiceCategoryOid = cat1.Oid AND scap.rn = 1
LEFT JOIN servicecategory cat2 ON scap.ServiceCategoryOid = cat2.Oid AND scap.rn = 2
LEFT JOIN servicecategory cat3 ON scap.ServiceCategoryOid = cat3.Oid AND scap.rn = 3
WHERE c.IsActive = 1 AND sc.IsActive = 1
GROUP BY p.Oid, p.LastName, p.FirstName, p.DateOfBirth, o.`Name`, cb2sc.ApprovedStartDate, cb2sc.ApprovedEndDate
ORDER BY t.Name, p.LastName
) base;

View File

@@ -73,7 +73,7 @@ namespace BeWo.Report
public abstract XtraReport CreateFinanceReport(DateTime? start, DateTime? end, bool splitByServiceCategory, bool onlyNotApproved);
public abstract XtraReport CreateJahresberichtReport(int year, long? cbOid, long? teamOid, long? betreuungsartOid);
public abstract XtraReport CreateJahresberichtReport(AnnualReportConfigDC config);
public abstract XtraReport CreateKassenbelegReport(BargeldtransaktionDC transaktion, long objectOid, TableID objectTid);

View File

@@ -1156,11 +1156,11 @@ namespace BeWo.Report
return report as XtraReport;
}
public override XtraReport CreateJahresberichtReport(int year, long? cbOid, long? teamOid, long? betreuungsartOid)
public override XtraReport CreateJahresberichtReport(AnnualReportConfigDC config)
{
var report = FindReportImp<JahresReportRO>();
report.SetReportDataSource(JahresReportRO.Create(year, cbOid, teamOid, betreuungsartOid));
report.SetReportDataSource(JahresReportRO.Create(config));
return report as XtraReport;
}
@@ -1633,8 +1633,8 @@ namespace BeWo.Report
table.Rows.Add(row);
}
var queryReportObject = QueryRO.Create(new Query() { Title = "Mitarbeiter" }, table);
queryReportObject.Name = "Mitarbeiter";
var queryReportObject = QueryRO.Create(new Query() { Title = "Klienten" }, table);
queryReportObject.Name = "Klienten";
queryReport.SetReportDataSource(queryReportObject);
return queryReport as XtraReport;

File diff suppressed because it is too large Load Diff

View File

@@ -117,7 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -63,6 +63,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
@@ -83,7 +84,6 @@ namespace BeWo.Report.DefaultReports
this.fieldDifferenzWoche2 = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldDifferenzWoche3 = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldDifferenzWoche4 = new DevExpress.XtraReports.UI.CalculatedField();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableData)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
@@ -452,6 +452,10 @@ namespace BeWo.Report.DefaultReports
this.GroupHeader1.Level = 1;
this.GroupHeader1.Name = "GroupHeader1";
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.FLSSollIstReportRO);
//
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
@@ -520,7 +524,7 @@ namespace BeWo.Report.DefaultReports
this.xrLabel1.SizeF = new System.Drawing.SizeF(560F, 25F);
this.xrLabel1.StyleName = "Title";
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.Text = "Auswertung über geleistete Fachleistungsstunden";
this.xrLabel1.Text = "Auswertung über geleistete Stunden";
//
// pageFooterBand1
//
@@ -633,10 +637,6 @@ namespace BeWo.Report.DefaultReports
this.fieldDifferenzWoche4.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldDifferenzWoche4.Name = "fieldDifferenzWoche4";
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.FLSSollIstReportRO);
//
// FLSSollIstWeeklyReport
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {

View File

@@ -57,7 +57,7 @@ namespace BeWo.Report.DefaultReports
private String GetWochenKey(FLSSollIstReportRO.FLSSollIstWochenSummen woche)
{
return String.Format("KW {0}, {1:dd.MM.yy} - {2:dd.MM.yy}", woche.KalenderWoche, woche.WocheStart, woche.WocheEnde);
return String.Format("{3}: KW {0}, {1:dd.MM.yy} - {2:dd.MM.yy}", woche.KalenderWoche, woche.WocheStart, woche.WocheEnde, woche.ObjectOid);
}
private void CreateTableCells(List<FLSSollIstReportRO.FLSSollIstWochenSummen> wochen)
{

View File

@@ -8,8 +8,6 @@ namespace BeWo.Report.DefaultReports
[IDSpecificClass(Identifier = "Mitarbeiterauslastung")]
public partial class Mitarbeiterauslastung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<MitarbeiterauslastungRO>
{
public Mitarbeiterauslastung()
{
InitializeComponent();
@@ -22,6 +20,5 @@ namespace BeWo.Report.DefaultReports
this.bindingSource1.DataSource = pRO;
}
}
}

View File

@@ -42,6 +42,7 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail2 = new DevExpress.XtraReports.UI.DetailBand();
@@ -52,13 +53,8 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell35 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell38 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
this.cellSollGesamt = new DevExpress.XtraReports.UI.XRTableCell();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.lblMonat = new DevExpress.XtraReports.UI.XRLabel();
this.pageFooterBand1 = new DevExpress.XtraReports.UI.PageFooterBand();
@@ -73,14 +69,18 @@ namespace BeWo.Report.DefaultReports
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.fieldTotalSC = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldTotalEmp = new DevExpress.XtraReports.UI.CalculatedField();
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
@@ -195,6 +195,15 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell28.Text = "xrTableCell28";
this.xrTableCell28.Weight = 0.090171325518485085D;
//
// xrTableCell8
//
this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.FreiProWoche")});
this.xrTableCell8.Multiline = true;
this.xrTableCell8.Name = "xrTableCell8";
this.xrTableCell8.TextFormatString = "{0:0.00}";
this.xrTableCell8.Weight = 0.090171325518485085D;
//
// DetailReport
//
this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -279,7 +288,7 @@ namespace BeWo.Report.DefaultReports
// xrTableCell1
//
this.xrTableCell1.Name = "xrTableCell1";
this.xrTableCell1.Text = "Kostenträger";
this.xrTableCell1.Text = "Kostentr<EFBFBD>ger";
this.xrTableCell1.Weight = 0.15329125478030678D;
//
// xrTableCell9
@@ -289,70 +298,21 @@ namespace BeWo.Report.DefaultReports
this.xrTableCell9.Text = "Bewilligt/Woche";
this.xrTableCell9.Weight = 0.090171325937473845D;
//
// xrTableCell7
//
this.xrTableCell7.Multiline = true;
this.xrTableCell7.Name = "xrTableCell7";
this.xrTableCell7.Text = "Frei/Woche";
this.xrTableCell7.Weight = 0.090171325937473845D;
//
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable1});
this.GroupFooter1.HeightF = 61.04164F;
this.xrTable2});
this.GroupFooter1.HeightF = 61.04167F;
this.GroupFooter1.Level = 1;
this.GroupFooter1.Name = "GroupFooter1";
//
// xrTable1
//
this.xrTable1.Font = new DevExpress.Drawing.DXFont("Arial", 8F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable1.Name = "xrTable1";
this.xrTable1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow1});
this.xrTable1.SizeF = new System.Drawing.SizeF(697F, 25F);
this.xrTable1.StylePriority.UseBorders = false;
this.xrTable1.StylePriority.UseFont = false;
this.xrTable1.StylePriority.UsePadding = false;
this.xrTable1.StylePriority.UseTextAlignment = false;
this.xrTable1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrTableRow1
//
this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell35,
this.xrTableCell38,
this.xrTableCell6,
this.cellSollGesamt,
this.xrTableCell10});
this.xrTableRow1.Name = "xrTableRow1";
this.xrTableRow1.Weight = 1D;
//
// xrTableCell35
//
this.xrTableCell35.Name = "xrTableCell35";
this.xrTableCell35.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
this.xrTableCell35.StylePriority.UseFont = false;
this.xrTableCell35.StylePriority.UsePadding = false;
this.xrTableCell35.StylePriority.UseTextAlignment = false;
this.xrTableCell35.Text = "Gesamt";
this.xrTableCell35.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell35.Weight = 0.18034254096455143D;
//
// xrTableCell38
//
this.xrTableCell38.Name = "xrTableCell38";
this.xrTableCell38.Weight = 0.15329111579090118D;
//
// xrTableCell6
//
this.xrTableCell6.Name = "xrTableCell6";
this.xrTableCell6.Weight = 0.1249972614437581D;
//
// cellSollGesamt
//
this.cellSollGesamt.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.ApprovedHoursPerWeek", "{0:0.00}")});
this.cellSollGesamt.Name = "cellSollGesamt";
this.cellSollGesamt.Text = "cellSollGesamt";
this.cellSollGesamt.Weight = 0.0849316752773914D;
//
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
@@ -473,36 +433,75 @@ namespace BeWo.Report.DefaultReports
this.fieldTotalEmp.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldTotalEmp.Name = "fieldTotalEmp";
//
// xrTableCell7
//
this.xrTableCell7.Multiline = true;
this.xrTableCell7.Name = "xrTableCell7";
this.xrTableCell7.Text = "Frei/Woche";
this.xrTableCell7.Weight = 0.090171325937473845D;
//
// xrTableCell8
//
this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.FreiProWoche")});
this.xrTableCell8.Multiline = true;
this.xrTableCell8.Name = "xrTableCell8";
this.xrTableCell8.TextFormatString = "{0:0.00}";
this.xrTableCell8.Weight = 0.090171325518485085D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterauslastungRO);
//
// xrTableCell10
// xrTableCell15
//
this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.SupportConceptDetailList.FreiProWoche")});
this.xrTableCell10.Multiline = true;
this.xrTableCell10.Name = "xrTableCell10";
this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.FreiProWoche")});
this.xrTableCell15.Multiline = true;
this.xrTableCell15.Name = "xrTableCell15";
xrSummary1.FormatString = "{0:0.00}";
xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Group;
this.xrTableCell10.Summary = xrSummary1;
this.xrTableCell10.Weight = 0.0849316752773914D;
this.xrTableCell15.Summary = xrSummary1;
this.xrTableCell15.Weight = 0.0849316752773914D;
//
// xrTableCell14
//
this.xrTableCell14.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "EmployeeDetailList.ApprovedHoursPerWeek", "{0:0.00}")});
this.xrTableCell14.Name = "xrTableCell14";
this.xrTableCell14.Text = "cellSollGesamt";
this.xrTableCell14.Weight = 0.0849316752773914D;
//
// xrTableCell13
//
this.xrTableCell13.Name = "xrTableCell13";
this.xrTableCell13.Weight = 0.1249972614437581D;
//
// xrTableCell12
//
this.xrTableCell12.Name = "xrTableCell12";
this.xrTableCell12.Weight = 0.15329111579090118D;
//
// xrTableCell11
//
this.xrTableCell11.Name = "xrTableCell11";
this.xrTableCell11.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 2, 0, 0, 100F);
this.xrTableCell11.StylePriority.UseFont = false;
this.xrTableCell11.StylePriority.UsePadding = false;
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Gesamt (zum Monatsende)";
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell11.Weight = 0.18034254096455143D;
//
// xrTableRow2
//
this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell11,
this.xrTableCell12,
this.xrTableCell13,
this.xrTableCell14,
this.xrTableCell15});
this.xrTableRow2.Name = "xrTableRow2";
this.xrTableRow2.Weight = 1D;
//
// xrTable2
//
this.xrTable2.Font = new DevExpress.Drawing.DXFont("Arial", 8F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable2.Name = "xrTable2";
this.xrTable2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow2});
this.xrTable2.SizeF = new System.Drawing.SizeF(697F, 25F);
this.xrTable2.StylePriority.UseBorders = false;
this.xrTable2.StylePriority.UseFont = false;
this.xrTable2.StylePriority.UsePadding = false;
this.xrTable2.StylePriority.UseTextAlignment = false;
this.xrTable2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// Mitarbeiterauslastung
//
@@ -532,8 +531,8 @@ namespace BeWo.Report.DefaultReports
this.Watermarks.Add(xrWatermark1);
((System.ComponentModel.ISupportInitialize)(this.xrTableDetail)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableHeader)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
@@ -566,11 +565,6 @@ namespace BeWo.Report.DefaultReports
private DevExpress.XtraReports.UI.XRTableCell xrTableCell9;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell19;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell28;
private DevExpress.XtraReports.UI.XRTable xrTable1;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow1;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell35;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell38;
private DevExpress.XtraReports.UI.XRTableCell cellSollGesamt;
private DevExpress.XtraReports.UI.DetailReportBand DetailReport1;
private DevExpress.XtraReports.UI.DetailBand Detail2;
private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2;
@@ -581,9 +575,14 @@ namespace BeWo.Report.DefaultReports
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell1;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell6;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell8;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell7;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell10;
private DevExpress.XtraReports.UI.XRTable xrTable2;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell11;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell13;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell14;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell15;
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
@@ -24,7 +25,6 @@ namespace BeWo.Report.DefaultReports.Alt
{
lblNotice.Visible = false;
}
if (pRO.InvoiceItems != null && pRO.InvoiceItems.Count == 1)
{
var ii = pRO.InvoiceItems[0];
@@ -35,7 +35,7 @@ namespace BeWo.Report.DefaultReports.Alt
}
if (!isDefaultSpitzabrechnung)
{
if (pRO.DifferentHourlyRateCount > 0 && pRO.HourlyRateNew.HasValue)
if (pRO.DifferentHourlyRateCount > 0 && pRO.HourlyRateNew.HasValue && !pRO.InvoiceItems.Any(d => d.ItemDescription != null && d.ItemDescription.Contains("Storno")))
{
isDefaultSpitzabrechnung = true;
}
@@ -70,11 +70,19 @@ namespace BeWo.Report.DefaultReports.Alt
{
foreach (var ii in pRO.InvoiceItems)
{
ii.ItemDescription = String.Format("{0:dd.MM.yyyy} bis {1:dd.MM.yyyy}: {2:0.00##} FLS {3}x {4:c}",
if (ii.ItemDescription != null && ii.ItemDescription.Contains("Storno"))
{
ii.ItemDescription = String.Format("Ausbuchung zur vorherigen Rechnung - {0:dd.MM.yyyy} bis {1:dd.MM.yyyy}",
ii.ItemPeriodStart, ii.ItemPeriodEnd);
}
else
{
ii.ItemDescription = String.Format("{0:dd.MM.yyyy} bis {1:dd.MM.yyyy}: {2:0.00##} FLS {3}x {4:c}",
ii.ItemPeriodStart, ii.ItemPeriodEnd,
ii.UnitCount, ii.RateFactor == 0 ? "" : "x " + pRO.RateFactorText2 + " ",
ii.AmountPerUnit);
}
}
}
}
}
}

View File

@@ -45,6 +45,8 @@ namespace BeWo.Report.ReportObjects
scd.IstKw5 /= 60;
scd.IstKw6 /= 60;
if (scd.EndDate.HasValue && scd.EndDate.Value.AddDays(1) >= ro.ReportEndDate)
{
empDetail.DirectIst += scd.DirectIst;
empDetail.MittelbarIst += scd.MittelbarIst;
empDetail.ApprovedHoursPerWeekTotal += scd.ApprovedHoursPerWeekTotal;
@@ -55,6 +57,9 @@ namespace BeWo.Report.ReportObjects
empDetail.ApprovedHoursPerMonth += scd.ApprovedHoursPerMonth;
empDetail.ApprovedHoursPerMonthWithRateFactorTotal += scd.ApprovedHoursPerMonthWithRateFactorTotal;
empDetail.ApprovedHoursPerMonthWithRateFactor += scd.ApprovedHoursPerMonthWithRateFactor;
empDetail.FreiProWoche += scd.FreiProWoche;
empDetail.FreiProMonat += scd.FreiProMonat;
}
}
}
}

View File

@@ -13,7 +13,7 @@ namespace BeWo.Report.ReportObjects
public class FLSSollIstReportRO
{
public DateTime? ReportEndDate { get; set; }
public FLSAnalysisConfigDC ReportConfig { get; set; }
public DateTime? ReportStartDate { get; set; }
public List<FLSSollIstRootRO> RootObjectList { get; set; } = new List<FLSSollIstRootRO>();
@@ -75,6 +75,7 @@ namespace BeWo.Report.ReportObjects
public class FLSSollIstWochenSummen
{
public long ObjectOid { get; set; } // Entweder Employee oder CustomerOid, je nachdem wer ausgewertet wird
public decimal? SollStunden { get; set; }
public decimal? IstStunden { get; set; }
@@ -118,7 +119,7 @@ namespace BeWo.Report.ReportObjects
public static FLSSollIstReportRO Create(List<FLSAnalysisRootDC> dcList, FLSAnalysisConfigDC config)
{
var ro = new FLSSollIstReportRO();
ro.ReportConfig = config;
ro.ReportStartDate = config.StartDate;
ro.ReportEndDate = config.EndDate;
@@ -141,7 +142,6 @@ namespace BeWo.Report.ReportObjects
{
var grpRo = new FLSSollIstReportGroupRO();
grpRo.Name = item.DisplayName;
grpRo.WochenSummen = ErstelleWochensummen(config.StartDate, config.EndDate, null);
if (item.Employee != null)
{
grpRo.ObjectOid = item.Employee.EmployeeOid;
@@ -152,6 +152,17 @@ namespace BeWo.Report.ReportObjects
grpRo.ObjectOid = item.Customer.CustomerOid;
grpRo.ObjectTid = TableID.Customer;
}
long wochenObjectOid = 0;
if (root.Employee != null)
{
wochenObjectOid = root.Employee.EmployeeOid;
}
else if (root.Customer != null)
{
wochenObjectOid = root.Customer.CustomerOid;
}
grpRo.WochenSummen = ErstelleWochensummen(config.StartDate, config.EndDate, null, wochenObjectOid);
foreach (var sc in item.SupportConcepts)
{
grpRo.CostBearer2SupportConceptList.Add(sc.SupportConcept2CostBearer);
@@ -206,7 +217,7 @@ namespace BeWo.Report.ReportObjects
return ro;
}
private static List<FLSSollIstWochenSummen> ErstelleWochensummen(DateTime? startDate, DateTime? endDate, decimal? defaultSoll)
private static List<FLSSollIstWochenSummen> ErstelleWochensummen(DateTime? startDate, DateTime? endDate, decimal? defaultSoll, long objectOid)
{
var liste = new List<FLSSollIstWochenSummen>();
if (startDate.HasValue && endDate.HasValue)
@@ -219,6 +230,7 @@ namespace BeWo.Report.ReportObjects
var sonntag = dt.AddDays(days);
var ws = new FLSSollIstWochenSummen();
ws.ObjectOid = objectOid;
ws.WocheStart = dt;
//Ermittele den nächsten Sonntag

View File

@@ -223,15 +223,20 @@ namespace BeWo.Report.ReportObjects
{
records = new List<ServiceRecordDC>();
}
// AB, 22.04.2026: Bugfix wenn Betreuung beendet und ein Zeitraum über Ende hinweg gewählt wird
var terminationDate = ro.Costbearer2Supportconcept.SupportConcept.Customer.TerminationDate;
DateTime? effectiveEnd = end;
if (terminationDate.HasValue && (!effectiveEnd.HasValue || terminationDate.Value < effectiveEnd.Value))
{
effectiveEnd = terminationDate.Value;
}
//1.
if (ro.SupportConceptApprovalPeriod != null && ro.SupportConceptApprovalPeriod.ServiceCategory != null)
{
ro.Leistungskategorie = ro.SupportConceptApprovalPeriod.ServiceCategory.Name;
ro.ServiceRecords = records.Where(sr =>
sr.ServiceDescription.Category.ServiceCategoryOid == ro.SupportConceptApprovalPeriod.ServiceCategory.ServiceCategoryOid)
.ToList();
ro.ServiceRecords = records.Where(sr => sr.ServiceDescription.Category.ServiceCategoryOid == ro.SupportConceptApprovalPeriod.ServiceCategory.ServiceCategoryOid).ToList();
}
else
{
@@ -272,7 +277,7 @@ namespace BeWo.Report.ReportObjects
}
else
{
ro.ApprovedHours = calc.GetApprovedHoursTillNow(ro.Costbearer2Supportconcept, end.Value) ?? 0;
ro.ApprovedHours = calc.GetApprovedHoursTillNow(ro.Costbearer2Supportconcept, effectiveEnd.Value) ?? 0;
}
ro.StundenNichtFehlkontakte = calc.GetBillableDurationInMinutes(flsRecords.Where(sr => sr.Start.Value.Date < end.Value.AddDays(1)).ToList()) / 60;
ro.StundenFehlkontakte = calc.GetBillableDurationInMinutes(fkRecords.Where(sr => sr.Start.Value.Date < end.Value.AddDays(1)).ToList()) / 60;
@@ -317,20 +322,20 @@ namespace BeWo.Report.ReportObjects
}
if (ro.SupportConceptApprovalPeriod != null)
{
ro.ApprovedHoursInReportTimeSpan = calc.GetApprovedHoursForPeriod(ro.SupportConceptApprovalPeriod, costRateDcs, start, end) ?? 0;
ro.ApprovedHoursInReportTimeSpan = calc.GetApprovedHoursForPeriod(ro.SupportConceptApprovalPeriod, costRateDcs, start, effectiveEnd) ?? 0;
}
else
{
ro.ApprovedHoursInReportTimeSpan = calc.GetApprovedHoursForPeriod(ro.Costbearer2Supportconcept, start.Value, end.Value);
ro.ApprovedHoursInReportTimeSpan = calc.GetApprovedHoursForPeriod(ro.Costbearer2Supportconcept, start.Value, effectiveEnd.Value);
}
if (splitByServiceCategory && ro.SupportConceptApprovalPeriod != null)
{
ro.ApprovedAmountInReportTimeSpan = (decimal)calc.GetApprovedAmountForPeriod(ro.Costbearer2Supportconcept, start.Value, end.Value, ro.SupportConceptApprovalPeriod.ServiceCategory);
ro.ApprovedAmountInReportTimeSpan = (decimal)calc.GetApprovedAmountForPeriod(ro.Costbearer2Supportconcept, start.Value, effectiveEnd.Value, ro.SupportConceptApprovalPeriod.ServiceCategory);
}
else
{
ro.ApprovedAmountInReportTimeSpan = (decimal)calc.GetApprovedAmountForPeriod(ro.Costbearer2Supportconcept, start.Value, end.Value, null);
ro.ApprovedAmountInReportTimeSpan = (decimal)calc.GetApprovedAmountForPeriod(ro.Costbearer2Supportconcept, start.Value, effectiveEnd.Value, null);
}
ro.AmountInReportTimeSpan = 0;
ro.AmountNichtFehlkontakteInReportTimeSpan = 0;

View File

@@ -64,23 +64,15 @@ namespace BeWo.Report.ReportObjects
}
public static JahresReportRO Create(int year, long? orgOid, long? teamOid, long? betreuungsartOid)
{
DateTime startDate = new DateTime(year, 1, 1);
return Create(startDate, startDate.AddYears(1), orgOid, teamOid, betreuungsartOid);
}
public static JahresReportRO Create(DateTime start, DateTime end, long? orgOid, long? teamOid, long? betreuungsartOid)
public static JahresReportRO Create(AnnualReportConfigDC config)
{
AnalysisServiceImp service = new AnalysisServiceImp();
var list = service.CreateAnnualReport(orgOid, teamOid, betreuungsartOid, start, end);
var list = service.CreateAnnualReport2(config);
var ro = Create(list);
ro.ReportStartDate = start;
ro.ReportEndDate = end;
ro.ReportStartDate = config.StartDate;
ro.ReportEndDate = config.EndDate;
return ro;
}

View File

@@ -249,6 +249,10 @@ namespace BeWo.Report.ReportObjects
public String AbsenceTimeString { get; set; }
public decimal FreiProWoche { get; set; }
public decimal FreiProMonat { get; set; }
public List<SupportConceptDetail> SupportConceptDetailList
{
get { return scDetailList; }

View File

@@ -44,7 +44,7 @@ namespace ABCBetreuungenReports
if (pRO.Services != null)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
int summeWegepauschalen = 0;
decimal summeWegepauschalen = 0;
int summeAusfallstunden = 0;
foreach (var sd in pRO.Services)
{
@@ -72,24 +72,16 @@ namespace ABCBetreuungenReports
sd.Notice3 = "";
}
// Felder für Wegepauschale setzen (Wenn FLS FaceToFace, dann ja)
// Felder für Wegepauschale setzen
if (sd.ServiceDescription.ToLower().Contains("behördengang") || sd.ServiceDescription.ToLower().Contains("außentermin") || sd.ServiceDescription.ToLower().Contains("wohnung"))
{
var emp = MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.GetByID<Employee>(sd.EmployeeOid));
if (emp.IsQualified.HasValue)
{
if (emp.IsQualified.Value)
{
sd.Notice4 = "1";
summeWegepauschalen++;
}
}
sd.Notice4 = "1";
summeWegepauschalen++;
}
else
sd.Notice4 = "";
// Felder für Ausfallstundnen setzen
// Felder für Ausfallstunden setzen
if (sd.ServiceDescription.ToLower().Contains("ausfall") || sd.ServiceDescription.ToLower().Contains("fehlkontakt"))
{
sd.Notice5 = "1";

View File

@@ -26,6 +26,9 @@ namespace BeWo.ABCBetreuungenReports
foreach (var item in pRO.InvoiceItems)
{
item.AbrechnungsText = String.Format("{0:dd.MM.yyyy} bis {1:dd.MM.yyyy}: {2:0.##} FLS {3}x {4:c}",
item.PeriodStartDate, item.PeriodEndDate, item.UnitCount, (!item.RateFactor.HasValue || item.RateFactor.Value == 0) ? "" : String.Format("x {0:0.00} ", (item.RateFactor + 100) / 100), item.AmountPerUnit);
if (item.ItemDescription == "Kontaktpauschale")
item.AbrechnungsText = item.AbrechnungsText.Replace("FLS", "Fahrten");
}

View File

@@ -60,6 +60,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BueroTeamMitarbeiterstundenkontoBerechnungMonate.cs" />
<Compile Include="BueroTeamMitarbeiterstundenkontoBerechnung.cs" />
<Compile Include="Export\QueryListReport.cs">
<SubType>Component</SubType>
</Compile>

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using AWOMuensterlandRecklinghausen.Service;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.Configuration;
using BeWo.Service.ServiceImplementations;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace AWOMuensterlandRecklinghausen
{
public class BueroTeamMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
public override bool ShouldCreateDayDetails()
{
return true;
}
public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var dd = base.CreateDayDetail(date, ed);
dd.MaxHoursUntilBreak = 6;
dd.BreakMinutes = 30;
dd.BreakMinutes2 = 15;
dd.MaxHoursUntilBreak2 = 9;
return dd;
}
}
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using AWOMuensterlandRecklinghausen.Service;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.Configuration;
using BeWo.Service.ServiceImplementations;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace AWOMuensterlandRecklinghausen
{
public class BueroTeamMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate
{
public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung()
{
return new CustomMitarbeiterstundenkontoBerechnung();
}
}
}

View File

@@ -21,7 +21,7 @@ namespace AWOMuensterlandRecklinghausen.Standard
public void SetReportDataSource(MitarbeiterstundenkontoRO pRO)
{
var msb = new MitarbeiterstundenkontoBerechnung();
var msb = new BueroTeamMitarbeiterstundenkontoBerechnung();
msb.CreateReport(pRO);
foreach (var ed in pRO.EmployeeDetailList)

View File

@@ -19,7 +19,7 @@ namespace AWOMuensterlandRecklinghausen.Standard
public void SetReportDataSource(MitarbeiterstundenkontoMonateRO pRO)
{
var msb = new MitarbeiterstundenkontoBerechnungMonate();
var msb = new BueroTeamMitarbeiterstundenkontoBerechnungMonate();
//var msb = new MitarbeiterstundenkontoBerechnungMonate();
msb.CreateReport(pRO);

View File

@@ -19,11 +19,11 @@ namespace AWOMuensterlandRecklinghausen.Standard
public void SetReportDataSource(MitarbeiterstundenkontoRO pRO)
{
var msb = new MitarbeiterstundenkontoBerechnung();
var msb = new BueroTeamMitarbeiterstundenkontoBerechnung();
msb.CreateReport(pRO);
this.bindingSource1.DataSource = pRO;
}
}
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using BeWo.Data.Access;
using BeWo.Data.Entities;
@@ -33,11 +34,11 @@ namespace AsSozialeDienstleistungenEV
decimal minutes = 0;
decimal betrag = 0;
decimal stundensatz = 0;
if (pRO.Services != null && pRO.Services.Count > 0)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
stundensatz = GetStundensatz(pRO.Services[0], pRO.StartDate);
var mainRecord = pRO.Services.GroupBy(e => e.ServiceCategory).OrderByDescending(g => g.Count()).First().First();
stundensatz = GetStundensatz(mainRecord, pRO.StartDate);
foreach (var sd in pRO.Services)
{
@@ -103,5 +104,6 @@ namespace AsSozialeDienstleistungenEV
// return 0;
//}
}
}

View File

@@ -29,6 +29,7 @@ namespace AsbRheinErftDueren
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
@@ -54,6 +55,7 @@ namespace AsbRheinErftDueren
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrLabel19 = new DevExpress.XtraReports.UI.XRLabel();
@@ -73,17 +75,15 @@ namespace AsbRheinErftDueren
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.xrLabel17 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel18 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel21 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel10 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldKontaktArt = new DevExpress.XtraReports.UI.CalculatedField();
this.TotalFLMBillableAlsStunden = new DevExpress.XtraReports.UI.CalculatedField();
this.MinutesAlsStunden = new DevExpress.XtraReports.UI.CalculatedField();
this.bindingSource1 = new System.Windows.Forms.BindingSource();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
@@ -125,12 +125,12 @@ namespace AsbRheinErftDueren
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTable3.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(49.3611F, 0F);
this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable3.Name = "xrTable3";
this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow6});
this.xrTable3.SizeF = new System.Drawing.SizeF(644.639F, 25F);
this.xrTable3.SizeF = new System.Drawing.SizeF(747F, 25F);
this.xrTable3.StylePriority.UseFont = false;
this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
@@ -142,7 +142,8 @@ namespace AsbRheinErftDueren
this.xrTableCell10,
this.xrTableCell2,
this.xrTableCell15,
this.xrTableCell12});
this.xrTableCell12,
this.xrTableCell18});
this.xrTableRow6.Name = "xrTableRow6";
this.xrTableRow6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableRow6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
@@ -176,7 +177,7 @@ namespace AsbRheinErftDueren
this.xrTableCell14.StylePriority.UseTextAlignment = false;
this.xrTableCell14.Text = "xrTableCell14";
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell14.Weight = 0.094696981389528381D;
this.xrTableCell14.Weight = 0.063384828937912779D;
//
// xrTableCell10
//
@@ -191,7 +192,7 @@ namespace AsbRheinErftDueren
this.xrTableCell10.StylePriority.UseTextAlignment = false;
this.xrTableCell10.Text = "xrTableCell10";
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell10.Weight = 0.094696933224158855D;
this.xrTableCell10.Weight = 0.063384845250950575D;
//
// xrTableCell2
//
@@ -204,7 +205,7 @@ namespace AsbRheinErftDueren
this.xrTableCell2.StylePriority.UsePadding = false;
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell2.Weight = 0.05366162346946534D;
this.xrTableCell2.Weight = 0.042256569949664952D;
//
// xrTableCell15
//
@@ -218,7 +219,7 @@ namespace AsbRheinErftDueren
this.xrTableCell15.StylePriority.UsePadding = false;
this.xrTableCell15.StylePriority.UseTextAlignment = false;
this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell15.Weight = 0.05366162346946534D;
this.xrTableCell15.Weight = 0.042256515143018758D;
//
// xrTableCell12
//
@@ -232,7 +233,7 @@ namespace AsbRheinErftDueren
this.xrTableCell12.StylePriority.UseTextAlignment = false;
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell12.TextFormatString = "{0:0.00}";
this.xrTableCell12.Weight = 0.10732323052948757D;
this.xrTableCell12.Weight = 0.071269990461128627D;
//
// GroupHeader1
//
@@ -249,13 +250,13 @@ namespace AsbRheinErftDueren
this.xrTableServiceRecords1.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.xrTableServiceRecords1.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTableServiceRecords1.LocationFloat = new DevExpress.Utils.PointFloat(49.3611F, 0F);
this.xrTableServiceRecords1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTableServiceRecords1.Name = "xrTableServiceRecords1";
this.xrTableServiceRecords1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableServiceRecords1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow2,
this.xrTableRow1});
this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(644.639F, 70F);
this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(747F, 70F);
this.xrTableServiceRecords1.StylePriority.UseBackColor = false;
this.xrTableServiceRecords1.StylePriority.UseBorders = false;
this.xrTableServiceRecords1.StylePriority.UseFont = false;
@@ -267,7 +268,8 @@ namespace AsbRheinErftDueren
this.xrTableCell3,
this.xrTableCell4,
this.xrTableCell11,
this.xrTableCell9});
this.xrTableCell9,
this.xrTableCell16});
this.xrTableRow2.Name = "xrTableRow2";
this.xrTableRow2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableRow2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
@@ -304,7 +306,7 @@ namespace AsbRheinErftDueren
this.xrTableCell4.StylePriority.UseTextAlignment = false;
this.xrTableCell4.Text = "Uhrzeit";
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell4.Weight = 0.41899441340782145D;
this.xrTableCell4.Weight = 0.28045147186033959D;
//
// xrTableCell11
//
@@ -320,7 +322,7 @@ namespace AsbRheinErftDueren
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Angebot";
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell11.Weight = 0.23743016759776542D;
this.xrTableCell11.Weight = 0.18696763609436626D;
//
// xrTableCell9
//
@@ -337,7 +339,7 @@ namespace AsbRheinErftDueren
this.xrTableCell9.StylePriority.UseTextAlignment = false;
this.xrTableCell9.Text = "FLS in";
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell9.Weight = 0.23743025284239694D;
this.xrTableCell9.Weight = 0.15766966850921618D;
//
// xrTableRow1
//
@@ -346,7 +348,8 @@ namespace AsbRheinErftDueren
this.xrTableCell8,
this.xrTableCell5,
this.xrTableCell6,
this.xrTableCell7});
this.xrTableCell7,
this.xrTableCell17});
this.xrTableRow1.Name = "xrTableRow1";
this.xrTableRow1.Weight = 1.223644578313253D;
//
@@ -371,7 +374,7 @@ namespace AsbRheinErftDueren
this.xrTableCell8.StylePriority.UseTextAlignment = false;
this.xrTableCell8.Text = "von";
this.xrTableCell8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell8.Weight = 0.20949720670391073D;
this.xrTableCell8.Weight = 0.14022572166567149D;
//
// xrTableCell5
//
@@ -386,7 +389,7 @@ namespace AsbRheinErftDueren
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.Text = "bis";
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell5.Weight = 0.2094972067039107D;
this.xrTableCell5.Weight = 0.14022572166567146D;
//
// xrTableCell6
//
@@ -402,7 +405,7 @@ namespace AsbRheinErftDueren
this.xrTableCell6.StylePriority.UseTextAlignment = false;
this.xrTableCell6.Text = "Art /\r\nAnzahl\r\nKlienten";
this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell6.Weight = 0.23743016759776545D;
this.xrTableCell6.Weight = 0.1869675790363729D;
//
// xrTableCell7
//
@@ -417,9 +420,13 @@ namespace AsbRheinErftDueren
this.xrTableCell7.StylePriority.UseBorders = false;
this.xrTableCell7.StylePriority.UseFont = false;
this.xrTableCell7.StylePriority.UseTextAlignment = false;
this.xrTableCell7.Text = "Stunden\r\n(ohne 1,2)";
this.xrTableCell7.Text = "Stunden";
this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell7.Weight = 0.23743025284239694D;
this.xrTableCell7.Weight = 0.15766989674118953D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
//
// formattingRuleStartDate
//
@@ -627,7 +634,7 @@ namespace AsbRheinErftDueren
this.xrLabel2.Multiline = true;
this.xrLabel2.Name = "xrLabel2";
this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel2.SizeF = new System.Drawing.SizeF(674.9998F, 25F);
this.xrLabel2.SizeF = new System.Drawing.SizeF(747F, 25F);
this.xrLabel2.StylePriority.UseFont = false;
this.xrLabel2.StylePriority.UseTextAlignment = false;
this.xrLabel2.Text = "Quittierungsbeleg [Mandator.Name]";
@@ -666,10 +673,6 @@ namespace AsbRheinErftDueren
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel17,
this.xrLabel18,
this.xrLabel21,
this.xrLabel11,
this.xrLabel10,
this.xrLabel9,
this.xrLabel1});
@@ -677,79 +680,15 @@ namespace AsbRheinErftDueren
this.GroupFooter1.KeepTogether = true;
this.GroupFooter1.Name = "GroupFooter1";
//
// xrLabel17
//
this.xrLabel17.Borders = DevExpress.XtraPrinting.BorderSide.Right;
this.xrLabel17.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel17.LocationFloat = new DevExpress.Utils.PointFloat(228.4301F, 19.99996F);
this.xrLabel17.Name = "xrLabel17";
this.xrLabel17.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel17.SizeF = new System.Drawing.SizeF(85F, 20F);
this.xrLabel17.StylePriority.UseBackColor = false;
this.xrLabel17.StylePriority.UseBorders = false;
this.xrLabel17.StylePriority.UseFont = false;
this.xrLabel17.StylePriority.UsePadding = false;
this.xrLabel17.StylePriority.UseTextAlignment = false;
this.xrLabel17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel18
//
this.xrLabel18.BackColor = System.Drawing.Color.Gainsboro;
this.xrLabel18.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel18.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "TotalFLMBillable", "{0:0.##}")});
this.xrLabel18.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel18.LocationFloat = new DevExpress.Utils.PointFloat(561.9656F, 19.99995F);
this.xrLabel18.Name = "xrLabel18";
this.xrLabel18.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel18.SizeF = new System.Drawing.SizeF(132.0345F, 20F);
this.xrLabel18.StylePriority.UseBackColor = false;
this.xrLabel18.StylePriority.UseBorders = false;
this.xrLabel18.StylePriority.UseFont = false;
this.xrLabel18.StylePriority.UsePadding = false;
this.xrLabel18.StylePriority.UseTextAlignment = false;
this.xrLabel18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrLabel21
//
this.xrLabel21.BackColor = System.Drawing.Color.Gainsboro;
this.xrLabel21.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel21.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel21.LocationFloat = new DevExpress.Utils.PointFloat(313.4301F, 19.99995F);
this.xrLabel21.Name = "xrLabel21";
this.xrLabel21.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel21.SizeF = new System.Drawing.SizeF(248.5354F, 20F);
this.xrLabel21.StylePriority.UseBackColor = false;
this.xrLabel21.StylePriority.UseBorders = false;
this.xrLabel21.StylePriority.UseFont = false;
this.xrLabel21.StylePriority.UsePadding = false;
this.xrLabel21.StylePriority.UseTextAlignment = false;
this.xrLabel21.Text = "Fachleistungen in Minuten";
this.xrLabel21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel11
//
this.xrLabel11.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(374.0001F, 39.99996F);
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.SizeF = new System.Drawing.SizeF(320F, 20F);
this.xrLabel11.StylePriority.UseBackColor = false;
this.xrLabel11.StylePriority.UseBorders = false;
this.xrLabel11.StylePriority.UseFont = false;
this.xrLabel11.StylePriority.UsePadding = false;
this.xrLabel11.StylePriority.UseTextAlignment = false;
this.xrLabel11.Text = "Ohne Faktor 1,2 (wird erst bei Abrechnung eingerechnet)";
this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrLabel10
//
this.xrLabel10.BackColor = System.Drawing.Color.Gainsboro;
this.xrLabel10.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel10.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(313.4301F, 0F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(141.93F, 0F);
this.xrLabel10.Name = "xrLabel10";
this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel10.SizeF = new System.Drawing.SizeF(248.5356F, 20F);
this.xrLabel10.SizeF = new System.Drawing.SizeF(250F, 20F);
this.xrLabel10.StylePriority.UseBackColor = false;
this.xrLabel10.StylePriority.UseBorders = false;
this.xrLabel10.StylePriority.UseFont = false;
@@ -762,7 +701,7 @@ namespace AsbRheinErftDueren
//
this.xrLabel9.Borders = DevExpress.XtraPrinting.BorderSide.Right;
this.xrLabel9.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(228.4301F, 0F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(56.93002F, 0F);
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(85F, 20F);
@@ -780,10 +719,10 @@ namespace AsbRheinErftDueren
this.xrLabel1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "TotalFLMBillableAlsStunden")});
this.xrLabel1.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(561.9656F, 0F);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(391.9301F, 0F);
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(132.0345F, 20F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(84.3299F, 20F);
this.xrLabel1.StylePriority.UseBackColor = false;
this.xrLabel1.StylePriority.UseBorders = false;
this.xrLabel1.StylePriority.UseFont = false;
@@ -810,9 +749,50 @@ namespace AsbRheinErftDueren
this.MinutesAlsStunden.Expression = "[Minutes] / 60";
this.MinutesAlsStunden.Name = "MinutesAlsStunden";
//
// bindingSource1
// xrTableCell16
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
this.xrTableCell16.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)));
this.xrTableCell16.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTableCell16.Multiline = true;
this.xrTableCell16.Name = "xrTableCell16";
this.xrTableCell16.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrTableCell16.StylePriority.UseBorders = false;
this.xrTableCell16.StylePriority.UseFont = false;
this.xrTableCell16.StylePriority.UsePadding = false;
this.xrTableCell16.StylePriority.UseTextAlignment = false;
this.xrTableCell16.Text = "Bemerkungen";
this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell16.Weight = 0.50619631022645872D;
//
// xrTableCell17
//
this.xrTableCell17.BackColor = System.Drawing.Color.Gainsboro;
this.xrTableCell17.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell17.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
this.xrTableCell17.Multiline = true;
this.xrTableCell17.Name = "xrTableCell17";
this.xrTableCell17.StylePriority.UseBackColor = false;
this.xrTableCell17.StylePriority.UseBorders = false;
this.xrTableCell17.StylePriority.UseFont = false;
this.xrTableCell17.StylePriority.UseTextAlignment = false;
this.xrTableCell17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell17.Weight = 0.50619616758147545D;
//
// xrTableCell18
//
this.xrTableCell18.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
this.xrTableCell18.Multiline = true;
this.xrTableCell18.Name = "xrTableCell18";
this.xrTableCell18.StylePriority.UseBorders = false;
this.xrTableCell18.StylePriority.UseFont = false;
this.xrTableCell18.StylePriority.UsePadding = false;
this.xrTableCell18.StylePriority.UseTextAlignment = false;
this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell18.Weight = 0.22881087286891738D;
//
// QuittierungsbelegJugendamt
//
@@ -892,7 +872,6 @@ namespace AsbRheinErftDueren
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
private DevExpress.XtraReports.UI.CalculatedField fieldKontaktArt;
private DevExpress.XtraReports.UI.XRLabel xrLabel11;
private DevExpress.XtraReports.UI.XRLabel xrLabel10;
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
@@ -900,10 +879,10 @@ namespace AsbRheinErftDueren
private DevExpress.XtraReports.UI.XRLabel xrLabel16;
private DevExpress.XtraReports.UI.XRLabel xrLabel19;
private DevExpress.XtraReports.UI.XRLabel xrLabel20;
private DevExpress.XtraReports.UI.XRLabel xrLabel17;
private DevExpress.XtraReports.UI.XRLabel xrLabel18;
private DevExpress.XtraReports.UI.XRLabel xrLabel21;
private DevExpress.XtraReports.UI.CalculatedField TotalFLMBillableAlsStunden;
private DevExpress.XtraReports.UI.CalculatedField MinutesAlsStunden;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell18;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell16;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell17;
}
}

View File

@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4D48D376-DCAE-4E22-82E3-36692B0FAE29}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AspBegleitungNrw</RootNamespace>
<AssemblyName>2103272562_Reports</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\CustomerDlls\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\CustomerDlls\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.DataAccess.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Office.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.RichEdit.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.RichEdit.v23.2.Export, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Charts.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraReports.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Invoicing\CustomInvoiceCreation.cs" />
<Compile Include="Invoicing\CustomInvoiceFactory.cs" />
<Compile Include="Invoicing\CustomLWLDiggaBerechnung.cs" />
<Compile Include="Invoicing\SettlementInvoiceCreation.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Reporting\CustomMitarbeiterstundenkontoBerechnung.cs" />
<Compile Include="Reporting\CustomReportCreator.cs" />
<Compile Include="Reporting\Quittierungsbeleg.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Reporting\Quittierungsbeleg.Designer.cs">
<DependentUpon>Quittierungsbeleg.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Data\Data.csproj">
<Project>{B0D73E3D-4AE7-4024-93A6-DB1F46D7CCEE}</Project>
<Name>Data</Name>
</ProjectReference>
<ProjectReference Include="..\..\Report\Report.csproj">
<Project>{40d8b312-ea64-49e3-a31a-5e57ed4d5654}</Project>
<Name>Report</Name>
</ProjectReference>
<ProjectReference Include="..\..\Service\Service.csproj">
<Project>{094331c3-ecee-4c89-bbfd-4c9ded89f0ef}</Project>
<Name>Service</Name>
</ProjectReference>
<ProjectReference Include="..\..\Shared\Shared.csproj">
<Project>{2f50b83d-a3f0-4ec4-979a-3f9b7e3d8ed4}</Project>
<Name>Shared</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Reporting\Quittierungsbeleg.resx">
<DependentUpon>Quittierungsbeleg.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Invoicing;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
using Service.Invoicing;
namespace TemplateNeuKunde.Invoicing
{
// public class CustomInvoiceCreation : InvoiceCreation
//{
// //public override void SetInvoiceId(ServiceInvoice invoice)
// //{
// // //invoice.InvoiceBase.InvoiceId = "SBD";
// // //invoice.InvoiceBase.InvoiceTypeText = "";
// //}
// // //Setze für Selbstzahler die Adresse des Klienten
// // public override void SetRecipientInformation(ServiceInvoice serviceInvoice, CostBearer costBearer)
// // {
// // if (costBearer.Organisation.Name == "Selbstzahler")
// // {
// // serviceInvoice.InvoiceBase.RecipientOrganisationOid = costBearer.Organisation.Oid;
// // if (serviceInvoice.InvoiceBase.CostBearer2SupportConcept != null)
// // {
// // var cust = serviceInvoice.InvoiceBase.CostBearer2SupportConcept.SupportConcept.Customer;
// // if (cust.Person.InvoiceAddress != null)
// // {
// // serviceInvoice.InvoiceBase.RecipientAddress = cust.Person.InvoiceAddress.CopyToNew();
// // }
// // else if (cust.Person.Address != null)
// // {
// // serviceInvoice.InvoiceBase.RecipientAddress = cust.Person.Address.CopyToNew();
// // }
// // serviceInvoice.InvoiceBase.RecipientPersonFirstName = cust.Person.FirstName;
// // serviceInvoice.InvoiceBase.RecipientPersonLastName = cust.Person.LastName;
// // serviceInvoice.InvoiceBase.RecipientCustomerOid = cust.Oid;
// // }
// // }
// // }
// }
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Invoicing;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
namespace TemplateNeuKunde.Invoicing
{
public class CustomInvoiceFactory : InvoiceFactory
{
// public override InvoiceCreation CreateInvoiceCreator(string specificId, string tenant, Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> supportConcepts2ServiceRecords)
// {
////Hier einkommentieren, wenn die Rechnungserstellung von einer bestimmten Kategorie einer Bewilligung abhängt
//foreach (var item in supportConcepts2ServiceRecords)
//{
// var csc = item.Key;
// var cb2sc = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(csc.CostBearerRelOids[0]);
// foreach (var scap in cb2sc.ApprovalPeriodList)
// {
// if (scap.ServiceCategory != null)
// {
// var ic = GetInvoiceCreatorForCategory(scap.ServiceCategory.Name);
// if (ic != null)
// return ic;
// }
// }
//}
////Hier einkommentieren, wenn die Rechnungserstellung von einer bestimmten Kategorie oder Organisation eines ServiceRecords abhängt
//foreach (var list in supportConcepts2ServiceRecords.Values)
// {
// foreach (var sr in list)
// {
// //Hier wird Kategorie geprüft
// var ic = GetInvoiceCreatorForCategory(sr.ServiceDescription.Category.Name);
// if (ic != null)
// return ic;
// //Hier wird Organisation geprüft
// if (sr.CostBearer.Name.ToLower().Contains("selbstzahler"))
// {
// return new CustomInvoiceCreation();
// }
// }
// }
// return base.CreateInvoiceCreator(specificId, tenant, supportConcepts2ServiceRecords);
// }
// private InvoiceCreation GetInvoiceCreatorForCategory(String catName)
// {
// if (!String.IsNullOrEmpty(catName))
// {
// String cat = catName.ToLower().Trim();
// if (cat.IndexOf("assistenz") >= 0)
// return new CustomInvoiceCreation();
// }
// return null;
// }
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Invoicing;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
namespace TemplateNeuKunde.Invoicing
{
public class CustomLWLDiggaBerechnung : LWLDiggaBerechnung
{
public override void InitBerechnung()
{
//this.Umstellungsdatum = new DateTime(2025, 1, 1);
}
}
}

View File

@@ -0,0 +1,51 @@
//using BeWo.Data.Entities;
//using BeWo.Service.Invoicing;
//using BS.Shared.DataContracts;
//using BS.Shared.Services;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//namespace TemplateNeuKunde.Invoicing
//{
// public class CustomSettlementInvoiceCreation : SettlementInvoiceCreation
// {
// public override bool CanCreateInvoiceTheOldWay(Settlement2DC si, CostBearer2SupportConcept c2s)
// {
// return false;
// }
//public override bool IsServiceRecordBillable(ServiceRecord iRecord)
//{
// if (iRecord.ServiceDescription.ServiceCategory.Name.Contains("Assistenz"))
// {
// return false;
// }
// return true;
//}
//public override void CalculateSettlementInvoiceApprovedAmounts(Settlement2DC si, SupportConceptCostBearerRelDC relDC, Calculations calc)
//{
// si.ApprovedFLSWeekly = 0;
// si.ApprovedFLS = 0;
// foreach (var sp in relDC.ApprovalPeriodList)
// {
// if (sp.ServiceCategory == null || !sp.ServiceCategory.Name.Contains("Assistenz"))
// {
// si.ApprovedFLSWeekly += calc.GetApprovedHoursPerWeek(sp, relDC.CostBearer.CostRatePeriods) ?? 0m;
// decimal flsTotal = calc.GetApprovedHoursTotal(sp, relDC.CostBearer.CostRatePeriods) ?? 0m;
// flsTotal = Math.Round(flsTotal, 2, MidpointRounding.AwayFromZero);
// si.ApprovedFLS += flsTotal;
// }
// }
//}
//public override IList<ServiceRecord> GetBillableServiceRecords(CostBearer2SupportConcept c2s)
//{
// return c2s.ServiceRecords.OrderBy(s => s.Start).Where(s => !s.ServiceDescription.ServiceCategory.Name.ToLower().Contains("assistenz")).ToList();
//}
// }
//}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("KundeXyz")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("KundeXyz")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("c1fed668-adb9-47e0-b589-1389618e1b6e")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Some files were not shown because too many files have changed in this diff Show More