LebenshilfeBadKreuznach/Quittierungsbeleg neue Fassung - alter bleibt vorerst

This commit is contained in:
2023-10-23 16:01:02 +02:00
parent ef3aff1cf1
commit f2f12e261d
6 changed files with 2268 additions and 33 deletions

View File

@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.DefaultReports;
using BeWo.Report.ReportObjects;
using BS.Shared;
using BS.Shared.Core;
using DevExpress.XtraReports.UI;
namespace LebenshilfeBadKreuznach
{
public class CustomReportCreator : DefaultReportCreator
{
public override XtraReport CreateServiceOverviewAllCustomersReport(int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay)
{
//List<ServicesOverviewRO> lROs = ServicesOverviewRO.Create(month, year, orgaOid, empOid, startDay, endDay);
List<ServicesOverviewRO> lROs = Create(month, year, orgaOid, empOid, startDay, endDay, serviceCategoryOid);
if (lROs.Count > 0)
{
var rootReport = CreateServicesOverviewReportForRo(lROs[0], serviceCategoryOid);
rootReport.CreateDocument();
for (int i = 1; i < lROs.Count; i++)
{
var lNext = CreateServicesOverviewReportForRo(lROs[i], serviceCategoryOid);
lNext.CreateDocument();
rootReport.Pages.AddRange(lNext.Pages);
}
return rootReport;
}
return new XtraReport();
}
private List<ServicesOverviewRO> Create(int pMonth, int pYear, long orgaOid, long empOid, int startDay, int endDay, long? serviceCategoryOid = null)
{
var roList = new List<ServicesOverviewRO>();
List<long> customerOids = new List<long>();
ApplicationUser loggedInUser = null;
if (LoggedInUserOperationContextExt.Current != null && LoggedInUserOperationContextExt.Current.User != null)
{
loggedInUser = LoggedInUserOperationContextExt.Current.User;
}
else
{
loggedInUser = SessionFacade.LoggedInUser;
}
if (loggedInUser != null && loggedInUser.Employee != null)
{
bool all = false;
foreach (var group in loggedInUser.UserGroups)
{
if (group.Name.ToLower().Contains("admin") || group.Name.ToLower().Contains("verwaltung"))
{
all = true;
}
}
if (all)
{
customerOids.AddRange(DAOFactory.GenericDAO.GetAllActive<Customer>()
.OrderBy(ob => ob.Person.LastName + ", " + ob.Person.FirstName).Select(c => c.Oid.Value));
}
else
{
var teams = DAOFactory.SearchDAO.FindLeadingTeams(loggedInUser.Employee.Oid.Value);
foreach (var team in teams)
{
foreach (var employee in team.MemberList)
{
foreach (var e2c in employee.Employee2CustomerList)
{
if (e2c.Customer.IsActive == ActivationTypeId.Active)
{
foreach (var v2o in e2c.ValueList)
{
if (v2o.Entry.Type == ValueListEntryType.StaffRoleType &&
v2o.Entry.Value.Contains("Hauptbetreuung"))
{
if (!customerOids.Contains(e2c.Customer.Oid.Value))
{
customerOids.Add(e2c.Customer.Oid.Value);
}
}
}
}
}
}
}
}
}
foreach (var coid in customerOids)
{
var ro = ServicesOverviewRO.Create(coid, pMonth, pYear, true, orgaOid, empOid, startDay, endDay, serviceCategoryOid);
//ServicesOverviewRO ro = ServicesOverviewRO.Create(customer, pSpan, disableEmptySupportConcepts, orgaOid, empOid, searchServiceRecordsByEndDate, serviceCategoryOid);
if (ro != null)
{
roList.Add(ro);
}
}
return roList.OrderBy(r => r.CustomerLastName + ", " + r.CustomerFirstName).ToList();
}
public override XtraReport CreateServiceOverviewReportForCustomers(IList<long> customerOids, int month, int year, long? orgaOid, long? empOid, long? serviceCategoryOid, int startDay, int endDay, bool nurFehlende)
{
var roList = new List<ServicesOverviewRO>();
foreach (var coid in customerOids)
{
var ro = ServicesOverviewRO.Create(coid, month, year, true, orgaOid ?? 0, empOid ?? 0, startDay, endDay, serviceCategoryOid);
if (ro != null)
{
roList.Add(ro);
}
}
if (roList.Count > 0)
{
var rootReport = CreateServicesOverviewReportForRo(roList[0], serviceCategoryOid);
rootReport.CreateDocument();
for (int i = 1; i < roList.Count; i++)
{
var lNext = CreateServicesOverviewReportForRo(roList[i], serviceCategoryOid);
lNext.CreateDocument();
rootReport.Pages.AddRange(lNext.Pages);
}
return rootReport;
}
return new XtraReport();
}
public override XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay)
{
var ro = ServicesOverviewRO.Create(customerOid, month, year, false, orgaOid, empOid, startDay, endDay, serviceCategoryOid);
return CreateServicesOverviewReportForRo(ro, serviceCategoryOid);
}
private XtraReport CreateServicesOverviewReportForRo(ServicesOverviewRO ro, long? serviceCategoryOid)
{
IBeWoReport<ServicesOverviewRO> report = null;
if (ro.StartDate < new DateTime(2023, 11, 1))
{
report = new QuittierungsbelegAlt(); // gültig bis 31.10.2023 -- irgendwann in 2024 mal löschen
}
if (report == null)
report = new Quittierungsbeleg();
report.SetReportDataSource(ro);
return report as XtraReport;
}
}
}

View File

@@ -50,12 +50,19 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Calculations\GroupDurationCalculator.cs" />
<Compile Include="CustomReportCreator.cs" />
<Compile Include="Export\CustomDataExporter.cs" />
<Compile Include="Export\SageExporter.cs" />
<Compile Include="Invoicing\CustomCalculations.cs" />
<Compile Include="Invoicing\CustomInvoiceCreation.cs" />
<Compile Include="Invoicing\CustomInvoiceFactory.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Quittierungsbeleg_old.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Quittierungsbeleg_old.Designer.cs">
<DependentUpon>Quittierungsbeleg_old.cs</DependentUpon>
</Compile>
<Compile Include="Quittierungsbeleg.cs">
<SubType>Component</SubType>
</Compile>
@@ -95,6 +102,10 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Quittierungsbeleg_old.resx">
<DependentUpon>Quittierungsbeleg_old.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Quittierungsbeleg.resx">
<DependentUpon>Quittierungsbeleg.cs</DependentUpon>
<SubType>Designer</SubType>

View File

@@ -89,17 +89,19 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldKontaktArt = new DevExpress.XtraReports.UI.CalculatedField();
this.hours = new DevExpress.XtraReports.UI.CalculatedField();
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableAbwesenheiten)).BeginInit();
@@ -157,6 +159,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell10,
this.xrTableCell2,
this.xrTableCell12,
this.xrTableCell7,
this.xrTableCell44});
this.xrTableRow6.Name = "xrTableRow6";
this.xrTableRow6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
@@ -175,7 +178,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell13.StylePriority.UseTextAlignment = false;
this.xrTableCell13.Text = "xrTableCell13";
this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell13.Weight = 0.13257575191014354D;
this.xrTableCell13.Weight = 0.098484852861385266D;
//
// xrTableCell10
//
@@ -189,7 +192,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell10.StylePriority.UseTextAlignment = false;
this.xrTableCell10.Text = "xrTableCell10";
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell10.Weight = 0.10732336265697585D;
this.xrTableCell10.Weight = 0.088068206419166462D;
//
// xrTableCell2
//
@@ -201,7 +204,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell2.StylePriority.UsePadding = false;
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell2.Weight = 0.18521992456785819D;
this.xrTableCell2.Weight = 0.16096712001601976D;
//
// xrTableCell12
//
@@ -214,7 +217,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell12.StylePriority.UsePadding = false;
this.xrTableCell12.StylePriority.UseTextAlignment = false;
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell12.Weight = 0.76357330767111165D;
this.xrTableCell12.Weight = 0.59813422412941342D;
//
// xrTableCell44
//
@@ -226,7 +229,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell44.StylePriority.UsePadding = false;
this.xrTableCell44.StylePriority.UseTextAlignment = false;
this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell44.Weight = 0.18630763669447015D;
this.xrTableCell44.Weight = 0.0860690971656276D;
//
// GroupHeader1
//
@@ -260,6 +263,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell4,
this.xrTableCell11,
this.xrTableCell28,
this.xrTableCell6,
this.xrTableCell48});
this.xrTableRow2.Name = "xrTableRow2";
this.xrTableRow2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
@@ -281,7 +285,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell3.StylePriority.UseTextAlignment = false;
this.xrTableCell3.Text = "Datum";
this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell3.Weight = 0.293295980654689D;
this.xrTableCell3.Weight = 0.21787707735841827D;
//
// xrTableCell4
//
@@ -298,7 +302,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell4.StylePriority.UseTextAlignment = false;
this.xrTableCell4.Text = "Stunden";
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell4.Weight = 0.23743027968050728D;
this.xrTableCell4.Weight = 0.19483245370079191D;
//
// xrTableCell11
//
@@ -312,9 +316,9 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell11.StylePriority.UseFont = false;
this.xrTableCell11.StylePriority.UsePadding = false;
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Leistungskategorie";
this.xrTableCell11.Text = "Leistung";
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell11.Weight = 0.40976058524259773D;
this.xrTableCell11.Weight = 0.35610601993308749D;
//
// xrTableCell28
//
@@ -328,7 +332,7 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell28.StylePriority.UseTextAlignment = false;
this.xrTableCell28.Text = "Ziele";
this.xrTableCell28.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell28.Weight = 1.6892458062949136D;
this.xrTableCell28.Weight = 1.323246613962477D;
//
// xrTableCell48
//
@@ -341,9 +345,9 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell48.StylePriority.UseBorders = false;
this.xrTableCell48.StylePriority.UseFont = false;
this.xrTableCell48.StylePriority.UseTextAlignment = false;
this.xrTableCell48.Text = "Betreuerin / Betreuer";
this.xrTableCell48.Text = "Betreuer";
this.xrTableCell48.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell48.Weight = 0.41216655261008683D;
this.xrTableCell48.Weight = 0.19040999651461457D;
//
// formattingRuleStartDate
//
@@ -913,6 +917,16 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell18.Weight = 0.075757568269402914D;
//
// xrTableCell1
//
this.xrTableCell1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell1.Name = "xrTableCell1";
this.xrTableCell1.StylePriority.UseFont = false;
this.xrTableCell1.StylePriority.UseTextAlignment = false;
this.xrTableCell1.Text = "Art";
this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell1.Weight = 0.2125420510791497D;
//
// xrTableRow4
//
this.xrTableRow4.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
@@ -950,6 +964,15 @@ namespace LebenshilfeBadKreuznach
this.xrTableCell21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell21.Weight = 0.075757568269402914D;
//
// xrTableCell5
//
this.xrTableCell5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell5.Name = "xrTableCell5";
this.xrTableCell5.StylePriority.UseFont = false;
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell5.Weight = 0.2125420510791497D;
//
// xrLabel15
//
this.xrLabel15.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Underline);
@@ -999,29 +1022,34 @@ namespace LebenshilfeBadKreuznach
this.hours.Expression = "Round([Minutes]/60,2)";
this.hours.Name = "hours";
//
// xrTableCell6
//
this.xrTableCell6.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell6.Font = new System.Drawing.Font("Arial", 10F);
this.xrTableCell6.Name = "xrTableCell6";
this.xrTableCell6.StylePriority.UseBorders = false;
this.xrTableCell6.StylePriority.UseFont = false;
this.xrTableCell6.StylePriority.UseTextAlignment = false;
this.xrTableCell6.Text = "Maßnahmen";
this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell6.Weight = 0.75942731821542953D;
//
// xrTableCell7
//
this.xrTableCell7.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.Notice")});
this.xrTableCell7.Name = "xrTableCell7";
this.xrTableCell7.StylePriority.UseTextAlignment = false;
this.xrTableCell7.Text = "xrTableCell7";
this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell7.Weight = 0.3432764829089468D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
//
// xrTableCell1
//
this.xrTableCell1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell1.Name = "xrTableCell1";
this.xrTableCell1.StylePriority.UseFont = false;
this.xrTableCell1.StylePriority.UseTextAlignment = false;
this.xrTableCell1.Text = "Art";
this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell1.Weight = 0.2125420510791497D;
//
// xrTableCell5
//
this.xrTableCell5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell5.Name = "xrTableCell5";
this.xrTableCell5.StylePriority.UseFont = false;
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell5.Weight = 0.2125420510791497D;
//
// Quittierungsbeleg
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -1125,5 +1153,7 @@ namespace LebenshilfeBadKreuznach
private DevExpress.XtraReports.UI.XRLabel lblKlientKrank;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell1;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell5;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell7;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell6;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,409 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Threading;
using BeWo.Core.Service;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.ServiceProxy;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
using DevExpress.XtraReports.UI;
namespace LebenshilfeBadKreuznach
{
public partial class QuittierungsbelegAlt : XtraReport, IBeWoReport<ServicesOverviewRO>
{
// gültig bis 31.10.2023 -- irgendwann in 2024 mal löschen
public QuittierungsbelegAlt()
{
InitializeComponent();
}
public void SetReportDataSource(ServicesOverviewRO pRO)
{
// Get calling method name
//StackTrace stackTrace = new StackTrace();
//Debug.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
bool hatGruppen = false;
double bg1 = 0;
double bg2 = 0;
double gruppe = 0;
//if (pRO == null)
// return;
if (pRO.Services != null)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
foreach (var sd in pRO.Services)
{
CreateGoalList(sd);
if (sd.ServiceCategory != null && sd.ServiceCategory.StartsWith("BG1"))
{
bg1 += Math.Round(sd.Minutes / 60, 2, MidpointRounding.AwayFromZero);
}
else if (sd.ServiceCategory != null && sd.ServiceCategory.StartsWith("BG2"))
{
bg2 += Math.Round(sd.Minutes / 60, 2, MidpointRounding.AwayFromZero);
}
else if (sd.ServiceCategory != null && sd.ServiceCategory.StartsWith("Gruppe"))
{
gruppe += Math.Round(sd.Minutes / 60, 2, MidpointRounding.AwayFromZero);
}
servicesBillable.Add(sd);
}
pRO.Services = servicesBillable;
}
var std = BerechneBewilligungenProWoche(pRO);
pRO.ApprovedFLSPerWeek = std.BG1;
pRO.ApprovedFLSPerWeekTotal = std.BG2;
pRO.ApprovedFLSTotal = std.Gruppe;
lblBg1.Text = String.Format("{0:0.00}", bg1);
lblBg2.Text = String.Format("{0:0.00}", bg2);
lblGruppe.Text = String.Format("{0:0.00}", gruppe);
ErstelleAbwesenheitenTabelle(pRO);
bindingSource1.DataSource = pRO;
}
public static void CreateGoalList(ServicesOverviewRO.ServiceDetail sd)
{
var serviceRecord = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(sd.ServiceRecordOid);
var srDc = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDC(serviceRecord);
sd.GoalList = String.Empty;
if (srDc.Goals != null && srDc.Goals.Count > 0)
{
Dictionary<long, string> key2Value = new Dictionary<long, string>();
Dictionary<long, long> ziel2kapitel = new Dictionary<long, long>();
Dictionary<long, string> ziel2value = new Dictionary<long, string>();
//masnahmen und foreach Schleife dazu können ab 2024 raus - ist auch getestet. Die brauchen keine Maßnahmen mehr dokumentieren und haben die auch alle gelöscht...
var masnahmen = srDc.Goals.Where(g => g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalType).OrderBy(g => g.ParentOid).ThenBy(g => g.TypeDescription).ToList();
var kapitel = srDc.Goals.Where(g => (g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType) && (g.TypeDescription != null && g.TypeDescription.StartsWith("Kapitel")) || (g.DisplayName != null && g.DisplayName.StartsWith("Kapitel"))).OrderBy(g => g.DisplayName).ToList();
var ziele = srDc.Goals.Where(g => (g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType) && !g.DisplayName.StartsWith("Kapitel")).OrderBy(g => g.DisplayName).ToList();
srDc.Goals = srDc.Goals.Where(g => g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType).OrderBy(g => g.ParentOid).ToList();
foreach (var goal in kapitel) //nimm zuerst alle Kapitel
{
var key = goal.ValueListEntryOid.Value;
string value = null;
if (!string.IsNullOrEmpty(goal.TypeDescription))
{
value = goal.TypeDescription;
}
else
{
value = goal.Abbreviation;
}
key2Value.Add(key, value);
}
foreach (var goal in ziele) //dann füge ziele zu bestehendem Kapitel - falls nicht eingetragen ergänze Kapitel
{
var key = goal.ValueListEntryOid.Value;
string value = null;
if (!string.IsNullOrEmpty(goal.TypeDescription))
{
value = goal.TypeDescription;
}
else
{
value = goal.Abbreviation;
}
if (goal.ParentOid.HasValue)
{
ziel2value[key] = value;
if (key2Value.ContainsKey(goal.ParentOid.Value))
{
ziel2kapitel.Add(key, goal.ParentOid.Value);
}
else
{
var goalParent = DAOFactory.GenericDAO.LoadByID<ValueListEntry>(goal.ParentOid.Value);
var parent = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(goalParent);
string parentValue;
if (!string.IsNullOrEmpty(parent.TypeDescription))
{
parentValue = parent.TypeDescription;
}
else
{
parentValue = parent.Abbreviation;
}
key2Value.Add(goal.ParentOid.Value, parentValue);
ziel2kapitel.Add(key, goal.ParentOid.Value);
}
}
else
{
key2Value.Add(key, value);
}
}
foreach (var m in masnahmen)
{
var key = m.ValueListEntryOid.Value;
string value = null;
if (!string.IsNullOrEmpty(m.TypeDescription))
{
value = m.TypeDescription;
}
else
{
value = m.Abbreviation;
}
if (m.ParentOid.HasValue)
{
var goalParent = DAOFactory.GenericDAO.LoadByID<ValueListEntry>(m.ParentOid.Value);
var parent = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(goalParent);
string parentValue = null;
if (!string.IsNullOrEmpty(parent.TypeDescription))
{
parentValue = parent.TypeDescription;
}
else
{
parentValue = parent.Abbreviation;
}
if (!ziel2kapitel.ContainsKey(m.ParentOid.Value)) //kein Ziel gewählt
{
if (parent.ParentOid.HasValue)
{
ziel2kapitel.Add(m.ParentOid.Value, parent.ParentOid.Value);
}
}
if (!ziel2value.ContainsKey(m.ParentOid.Value)) //kein Ziel gewählt
{
{
ziel2value[m.ParentOid.Value] = parentValue;
}
}
ziel2value[m.ParentOid.Value] += ", " + value;
if (!key2Value.ContainsKey(parent.ParentOid.Value)) //und kein Kapitel gewählt
{
var parentParent = DAOFactory.GenericDAO.LoadByID<ValueListEntry>(parent.ParentOid.Value);
var parentKapitel = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(parentParent);
string kapitelValue = null;
if (!string.IsNullOrEmpty(parentKapitel.TypeDescription))
{
kapitelValue = parentKapitel.TypeDescription;
}
else
{
kapitelValue = parentKapitel.Abbreviation;
}
key2Value.Add(parent.ParentOid.Value, kapitelValue);
}
}
else
{
key2Value.Add(key, value);
}
}
foreach (var item in ziel2kapitel)
{
key2Value[item.Value] += ", " + ziel2value[item.Key];
}
foreach (KeyValuePair<long, string> item in key2Value.OrderBy(key => key.Value))
{
if (sd.GoalList.Length > 0)
{
sd.GoalList += ", ";
}
sd.GoalList += item.Value;
}
}
}
private void ErstelleAbwesenheitenTabelle(ServicesOverviewRO pRo)
{
var reportSpan = new DateTimeSpan(pRo.StartDate, pRo.EndDate);
var customer = MapperFactory.CustomerDC_Customer.MapToNewDC(DAOFactory.GenericDAO.GetByID<Customer>(pRo.CustomerOid));
Dictionary<string, List<AbsenceTimeDC>> allAbsInSpan = new Dictionary<string, List<AbsenceTimeDC>>();
if (customer != null && customer.AbsenceTimes != null && customer.AbsenceTimes.Count > 0)
{
foreach (var abs in customer.AbsenceTimes)
{
abs.End = abs.End.HasValue ? abs.End.Value : pRo.EndDate;
if (abs.Start >= pRo.StartDate && abs.Start <= pRo.EndDate || abs.End >= pRo.StartDate && abs.End <= pRo.EndDate)
{
if (!allAbsInSpan.ContainsKey(abs.Reason.Description))
allAbsInSpan.Add(abs.Reason.Description, new List<AbsenceTimeDC>());
allAbsInSpan[abs.Reason.Description].Add(abs);
}
}
}
foreach (var abs in allAbsInSpan)
{
if (abs.Key.ToLower() == "klient urlaub")
{
lblKlientUrlaub.Visible = true;
foreach (var u in abs.Value)
{
lblKlientUrlaub.Text += u.Start.Value.Date == u.End.Value.Date ? string.Format("am {0:dd.MM.yyyy}", u.Start) : string.Format("vom {0:dd.MM.yyyy} bis {1:dd.MM.yyyy}", u.Start, u.End);
if (abs.Value.Last() != u)
lblKlientUrlaub.Text += ", ";
}
}
else if (abs.Key.ToLower() == "klient krank")
{
lblKlientKrank.Visible = true;
foreach (var u in abs.Value)
{
lblKlientKrank.Text += u.Start.Value.Date == u.End.Value.Date ? string.Format("am {0:dd.MM.yyyy}", u.Start) : string.Format("vom {0:dd.MM.yyyy} bis {1:dd.MM.yyyy}", u.Start, u.End);
if (abs.Value.Last() != u)
lblKlientKrank.Text += ", ";
}
}
}
if (allAbsInSpan.Count > 0)
{
int newRows = 0;
int index = 1;
foreach (var abs in allAbsInSpan)
{
if (abs.Key.ToLower() == "klient krank" || abs.Key.ToLower() == "klient urlaub")
continue;
foreach (var at in abs.Value)
{
DevExpress.XtraReports.UI.XRTableRow row = null;
if (index < xrTableAbwesenheiten.Rows.Count)
{
row = xrTableAbwesenheiten.Rows[index];
}
else
{
row = xrTableAbwesenheiten.InsertRowBelow(xrTableAbwesenheiten.Rows[xrTableAbwesenheiten.Rows.Count - 1]);
newRows++;
}
row.Cells[0].Text = String.Format("{0:dd.MM.yyyy}", at.Start);
int? days = null;
if (at.End.HasValue)
{
row.Cells[1].Text = String.Format("{0:dd.MM.yyyy}", at.End);
days = (int)at.End.Value.Subtract(at.Start.Value).TotalDays + 1;
}
else
{
row.Cells[1].Text = "unbekannt";
}
row.Cells[2].Text = days != null ? String.Format("{0:0}", days) : "";
row.Cells[3].Text = at.Reason != null && !at.Reason.Description.IsNullOrEmpty() ? at.Reason.Description : "";
index++;
}
}
if (newRows > 0)
{
lblUnterschriftKlient.Top += newRows * 20;
}
}
}
private Stunden BerechneBewilligungenProWoche(ServicesOverviewRO pRO)
{
Stunden std = new Stunden();
if (pRO.SupportConceptCostBearer != null)
{
CostBearer2SupportConcept c2s = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(pRO.SupportConceptCostBearer.CostBearer2SupportConceptOid.Value);
var calc = PluginLoader.FindClass<BS.Shared.Services.Calculations>(c2s.CostBearer.ID) ?? BS.Shared.Services.Calculations.GetInstance(c2s.CostBearer.ID);
if (c2s.StartDate.HasValue && c2s.StartDate > pRO.StartDate)
{
pRO.StartDate = c2s.StartDate.Value;
}
//if (c2s.EndDate.HasValue && c2s.EndDate < pRO.EndDate)
//{
// pRO.EndDate = c2s.EndDate.Value;
//}
//var c2s = GetCostBearer2SupportConcept(pRo);
foreach (var scap in pRO.SupportConceptCostBearer.ApprovalPeriodList)
{
if (scap.StartDate <= pRO.EndDate && scap.EndDate >= pRO.StartDate)
{
var bewilligt = calc.GetApprovedHoursPerWeek(scap, pRO.SupportConceptCostBearer.CostBearer.CostRatePeriods) ?? 0;
if (scap.ServiceCategory != null)
{
if (scap.ServiceCategory.Name.StartsWith("BG1"))
{
std.BG1 += bewilligt;
}
else if (scap.ServiceCategory.Name.StartsWith("BG2"))
{
std.BG2 += bewilligt;
}
else if (scap.ServiceCategory.Name.StartsWith("Gruppe"))
{
std.Gruppe += bewilligt;
}
}
}
else if (scap.StartDate <= pRO.EndDate)
{
var bewilligt = calc.GetApprovedHoursPerWeek(scap, pRO.SupportConceptCostBearer.CostBearer.CostRatePeriods) ?? 0;
if (scap.ServiceCategory.Name.StartsWith("BG1"))
{
std.BG1 += bewilligt;
}
else if (scap.ServiceCategory.Name.StartsWith("BG2"))
{
std.BG2 += bewilligt;
}
else if (scap.ServiceCategory.Name.StartsWith("Gruppe"))
{
std.Gruppe += bewilligt;
}
}
}
}
return std;
}
public class Stunden
{
public decimal BG1 { get; set; }
public decimal BG2 { get; set; }
public decimal Gruppe { get; set; }
}
}
}

View File

@@ -0,0 +1,494 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<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>21, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="xrPictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAQEA3ADcAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsN
DhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCACbAkQDASIAAhEBAxEB/8QA
HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW
V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigBKbI21SfQZp1ePftY+Ol8
A/AfxPcrIi3l9B/ZtsrvtLPP8jFf9pULvj/YNbUKUq9WNKO8nY5sTWWHozrS2imz5A17/goJ8StUsZbe
xtdD0d5FwLq3tXkljOeq+Y7J04+ZD3ryfWv2hfiZr1/JeXXjnXEmf7wtL17aP8I4iqj8BXntFfuVDK8F
QVoUl91z8BxGa43EP36sn8z6F+Av7WnizwZ460ePxZ4q1PUfCDzFb+O6AupArIyq+9wZNqsVYhGyQp4b
OD+len6hbarY299ZXEV3Z3EazQ3EDh45EYAqysOCCDkEetfifX2l/wAE+/jM0F7ffDrVbx2jmBvNHWRs
hWGTPCMnjIxIFAxxKScnn5PiLJ4On9bw6s47pdV39V+XofY8M53ONX6niJXUtm3s+3o/zPumiiivzM/V
gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
BprkfiJ8V/Cnwp0uO/8AFOsw6VBKxWJXDPJKRjOyNQWbGRkgcZ5xXmP7RP7WXh/4K291pNiU1vxkYgYt
PUnyrYsPladh0GPmCD5myv3QwYfnJ4/+IWv/ABO8ST694k1CTUdRkAQM2AkSA5VEUcKoJPA6kknJJNfV
5TkFXH2q1fdh+L9P8z43OOI6WX3pUfeqfgvX/I+n/GX/AAUW8RS+IH/4RXw7ptvoi8J/a6yS3MhBPzHy
5FVMjHyjdjB+Y5wPsP4O/ESD4qfDPw/4mikhaa9tUa6WBWVIrgDbNGA3ICuGAzngA5IwT+Pdeq/A39o7
xV8B7q6TSGhv9IvGD3Gl3u4xFxj94hByjlRt3cgjGQdq4+pzLhujLDr6lG04/ifI5XxPXp4hvHSvCX4H
6yUv8q4r4O/Ei0+LHw50XxPaFAbyEG4hQkiGdfllj5GflYMASORg9CK7TrX5dUpypTcJqzR+t06ka0FU
g7phXz7+3B8P9S8efA+4fS182fRLtdWkgGN0kSRyJJjJ6qshf1OzABJFfQf8qayhhgjgjBrXDV3hq0a0
d4u5ji8PHF0J0JbSVj8R6K/Qi/8A+Cc/gV7K4Wy8Q+IoLsxsIJLiWCVEfB2lkESlgDjIDDPqOteT+L/+
CdvjLSlaTw9r+l69GkRYx3CPZyu46Ig+dTn1LLz+dfr1DiLL62jnyvzPxavw1mNBXUOZeTufJ9WNO1C6
0jULW+sriS1vbWVZoLiI7XjdTuVgexBAP4VpeMvBms/D3xJeaB4gsjp+r2ewT2xkSTZuRXX5kJU5VlPB
71i19HGUK0Lx1TPmnGdGdmrSR+pX7Mv7SWmfHPw2LW4aOy8XWES/b7EkDzRwPtEXqhJGR1QkA8FWb2/n
OO1fi14Z8Tar4M8QWOt6JfS6bqtlJ5tvcwkBlbBBBGCCCCQVIwQSDkGv1B/Zn/aGs/j34TlmkgWw8Rab
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
</value>
</data>
</root>