diff --git a/BeWo/BeWoApp.xaml.cs b/BeWo/BeWoApp.xaml.cs
index 04c35065e..fae2807a7 100644
--- a/BeWo/BeWoApp.xaml.cs
+++ b/BeWo/BeWoApp.xaml.cs
@@ -601,7 +601,7 @@ namespace BeWo
String url = "";
#if DEBUG
url = String.Format("http://localhost:3777/Host");
- //return new Uri("https://app4.bewoplaner.de/service");
+ //return new Uri("https://app5.bewoplaner.de/service");
//url = String.Format("app1.bewoplaner.de/service");
#endif
diff --git a/BeWo/ServiceProxy/ServiceFacade.cs b/BeWo/ServiceProxy/ServiceFacade.cs
index 45b2a849a..38074fb33 100644
--- a/BeWo/ServiceProxy/ServiceFacade.cs
+++ b/BeWo/ServiceProxy/ServiceFacade.cs
@@ -905,7 +905,24 @@ namespace BeWo.ServiceProxy
}
else
{
- BeWoApp.ShowError(null, e, true);
+ String allMessage = String.Format("{0}", e);
+
+
+
+ if (!String.IsNullOrEmpty(allMessage) && allMessage.IndexOf("Es war kein an https://") >= 0 && allMessage.IndexOf("lauschender Endpunkt") >= 0)
+ {
+ String msg = "Es konnte leider keine Verbindung zum Server hergestellt werden. Bitte prüfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut. Bei wiederholter Fehlermeldung schicken Sie bitte folgende Fehlermeldung an support@bewoplaner.de";
+
+ BeWoApp.ShowError(msg, e, true);
+ }
+ else if (!String.IsNullOrEmpty(e.Message) && e.Message.IndexOf("Der Prozess kann nicht auf die Datei") >= 0 && e.Message.IndexOf("von einem anderen Prozess verwendet") >= 0)
+ {
+ BeWoApp.ShowError(e.Message, e, false);
+ }
+ else
+ {
+ BeWoApp.ShowError(null, e, true);
+ }
}
}
diff --git a/BeWo/View/Detail/CustomerView.xaml.cs b/BeWo/View/Detail/CustomerView.xaml.cs
index 45b28f2c7..5c6f272a8 100644
--- a/BeWo/View/Detail/CustomerView.xaml.cs
+++ b/BeWo/View/Detail/CustomerView.xaml.cs
@@ -722,7 +722,7 @@ namespace BeWo.View.Detail
foreach (var liste in ViewModel.EmployeeRelations.VMList)
{
- if (ViewModel.EmployeeRelations.NewVM.Employee.EmployeeOid == liste.Employee.EmployeeOid && ViewModel.EmployeeRelations.NewVM.Role.Equals(liste.Role))
+ if (ViewModel.EmployeeRelations.NewVM.Employee != null && ViewModel.EmployeeRelations.NewVM.Employee.EmployeeOid == liste.Employee.EmployeeOid && ViewModel.EmployeeRelations.NewVM.Role.Equals(liste.Role))
{
isEmployeeRolleVorhanden = true;
MessageBox.Show(Translator.Translate("Der/die Mitarbeiter/in wurde bereits mit dieser Rolle zugewiesen."), "Hinzufügen nicht möglich", MessageBoxButton.OK, MessageBoxImage.Exclamation);
diff --git a/BeWo/View/ExceptionMessageBox.xaml.cs b/BeWo/View/ExceptionMessageBox.xaml.cs
index dc8959a54..9159e79d0 100644
--- a/BeWo/View/ExceptionMessageBox.xaml.cs
+++ b/BeWo/View/ExceptionMessageBox.xaml.cs
@@ -10,7 +10,7 @@ namespace BeWo.View
{
InitializeComponent();
- if (!String.IsNullOrEmpty(message) && !showDetails)
+ if (!String.IsNullOrEmpty(message))
tb_message.Text = message;
else
{
@@ -26,11 +26,6 @@ namespace BeWo.View
contentError.Visibility = Visibility.Collapsed;
} else
{
- tb_stack.Text = String.Empty;
- if (!String.IsNullOrEmpty(message))
- {
- tb_stack.Text = message + System.Environment.NewLine + System.Environment.NewLine + tb_stack.Text;
- }
if (ex != null)
{
tb_stack.Text += ex.ToString();
diff --git a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/MySql/MySqlHelper.cs b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/MySql/MySqlHelper.cs
index 9455b0f4d..1e93c8717 100644
--- a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/MySql/MySqlHelper.cs
+++ b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/MySql/MySqlHelper.cs
@@ -202,7 +202,7 @@ namespace BeWoDatabaseTerminator.MySql
var command = new MySqlCommand(
"INSERT INTO applicationUser(EmployeeOid, Tid, LoginName, Password, Version, UdpUser, InsUser, InsTs, IsActive, Salt, PasswordHash) " +
- $"VALUES({employeeOid}, 28, 'admin', '{userCredentials.HashedPassword}', 1, 'Max Mustermann', 'Max Mustermann', NOW(), 1, '{userCredentials.Salt}', '{userCredentials.BCryptPassword}')", _Connection);
+ $"VALUES({employeeOid}, 28, 'm1', '{userCredentials.HashedPassword}', 1, 'Max Mustermann', 'Max Mustermann', NOW(), 1, '{userCredentials.Salt}', '{userCredentials.BCryptPassword}')", _Connection);
command.ExecuteNonQuery();
diff --git a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs
index a9688b87c..a42ea6ce8 100644
--- a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs
+++ b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Program.cs
@@ -30,6 +30,7 @@ namespace BeWoDatabaseTerminator
private static string _ConnectionStringPort;
private static string _MultitenancyPath;
+ private static string _BackupConfigFolderPath;
private static string _CreateScriptsFolderPath;
private static string _ServerName;
@@ -84,6 +85,7 @@ namespace BeWoDatabaseTerminator
_ServerName = ConfigurationManager.AppSettings["ServerName"];
_MultitenancyPath = ConfigurationManager.AppSettings["MultitenancyPath"];
+ _BackupConfigFolderPath = ConfigurationManager.AppSettings["BackupConfigFolderPath"];
_CreateScriptsFolderPath = ConfigurationManager.AppSettings["CreateScriptsFolderPath"];
_ConnectionStringServer = ConfigurationManager.AppSettings["ConnectionStringServer"];
_ConnectionStringPassword = ConfigurationManager.AppSettings["ConnectionStringPassword"];
@@ -143,7 +145,7 @@ namespace BeWoDatabaseTerminator
{
var contractStatus = contractStatusKeyValuePair.Value;
- if (contractStatus.Tenant == "3614370592")
+ if (contractStatus.Tenant == "5564670353")
{
}
@@ -162,7 +164,9 @@ namespace BeWoDatabaseTerminator
{
FileUtils.WriteLog($"Deaktiviere Datenbank `{contractStatus.Tenant}`.", _LogFilePath);
ToggleConfigActivation(contractStatus, false);
-
+ ToggleBackupConfigActivation(contractStatus, false);
+
+
}
if(contractStatus.Delete == 1)
@@ -286,7 +290,7 @@ namespace BeWoDatabaseTerminator
//connectionString = isExisting ? ExtractConnectionString(configFilePath) : connectionString;
ToggleConfigActivation(contractStatus, true);
-
+ ToggleBackupConfigActivation(contractStatus, true);
//if(!isExisting)
//{
// RunCreateScripts(tenant, connectionString);
@@ -365,6 +369,31 @@ namespace BeWoDatabaseTerminator
}
}
+ private static void ToggleBackupConfigActivation(ContractStatus contractStatus, bool isToBeActivated)
+ {
+ var fileName1 = isToBeActivated ? $"{contractStatus.Tenant}.db2mail.deactivated" : $"{contractStatus.Tenant}.db2mail";
+ var fileName2 = isToBeActivated ? $"{contractStatus.Tenant}.db2mail" : $"{contractStatus.Tenant}.db2mail.deactivated";
+
+ var path1 = Path.Combine(_BackupConfigFolderPath, fileName1);
+ var path2 = Path.Combine(_BackupConfigFolderPath, fileName2);
+
+ if (File.Exists(path1) && !File.Exists(path2))
+ {
+ File.Move(path1, path2);
+ if (File.Exists(path1))
+ {
+ File.Delete(path1);
+
+ }
+
+ FileUtils.WriteLog($"{contractStatus.Tenant}.db2mail {(isToBeActivated == false ? "de" : string.Empty)}aktiviert.", _LogFilePath);
+ }
+ else
+ {
+ FileUtils.WriteLog($"Fehler beim {(isToBeActivated == false ? "Dea" : "A")}ktivieren: {fileName1} existiert nicht oder {fileName2} existiert.", _LogFilePath);
+ }
+ }
+
///
/// Erzeugt eine neue Datenbank, passt sie dem neuesten Stand an und füllt sie mit Basisdaten.
///
@@ -383,10 +412,11 @@ namespace BeWoDatabaseTerminator
Directory.CreateDirectory(_MultitenancyPath);
}
#endif
- if (Directory.Exists(_CreateScriptsFolderPath) && Directory.Exists(_MultitenancyPath))
+ if (Directory.Exists(_CreateScriptsFolderPath) && Directory.Exists(_MultitenancyPath) && Directory.Exists(_BackupConfigFolderPath))
{
- FileUtils.GenerateNewConfigFile(Path.Combine(_MultitenancyPath, $"{tenant}.config"), connectionString);
-
+ FileUtils.GenerateNewConfigFile(Path.Combine(_MultitenancyPath, $"{tenant}.config"), connectionString, tenant);
+ FileUtils.GenerateNewDBAdminFile(Path.Combine(_CreateAdminFolderPath, $"{tenant}.db2mail"), connectionString, tenant);
+
var createScriptPath = Path.Combine(_CreateScriptsFolderPath, _CreateScriptName);
var changesScriptPath = Path.Combine(_CreateScriptsFolderPath, _ChangesScriptName);
var insertScriptPath = Path.Combine(_CreateScriptsFolderPath, _InsertScriptName);
diff --git a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Utils/FileUtils.cs b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Utils/FileUtils.cs
index d6ca04fc9..a0466927a 100644
--- a/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Utils/FileUtils.cs
+++ b/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Utils/FileUtils.cs
@@ -6,7 +6,7 @@ namespace BeWoDatabaseTerminator.Utils
public static class FileUtils
{
// Wird nach dem Laden der Stati aufgerufen. Enthält also den neuen Status.
- public static void GenerateNewConfigFile(string pathToConfigFile, string connectionString, bool isDeactivated = false)
+ public static void GenerateNewConfigFile(string pathToConfigFile, string connectionString, string tenant, bool isDeactivated = false)
{
var config = pathToConfigFile;
@@ -30,7 +30,7 @@ namespace BeWoDatabaseTerminator.Utils
"NHibernate.Driver.MySqlDataDriver\r\n\t\t\t" +
"\r\n\t\t\t" +
"\r\n\t\t\t\t" +
- $"{connectionString}\r\n\t\t\t" +
+ $"{connectionString};Initial Catalog={tenant}\r\n\t\t\t" +
"\r\n\t\t\t" +
"\r\n\t\t\t\t" +
"NHibernate.Dialect.MySQLDialect\r\n\t\t\t" +
@@ -49,6 +49,36 @@ namespace BeWoDatabaseTerminator.Utils
File.WriteAllText(config, configText);
}
+ public static void GenerateNewDBAdminFile(string pathToFile, string tenant, string port, string username, string password, bool isDeactivated = false)
+ {
+ //
+//Mittelpunkt GbR
+//cb@ownsoft.de
+//localhost
+//2206
+//5564670353
+//BeWoUser
+//BeWoPl@ner!
+
+ var config = pathToFile;
+
+ if (isDeactivated)
+ {
+ config += ".deactivated";
+ }
+
+ var text =
+ $"{tenant}\r\n" +
+ "cb@ownsoft.de\r\n" +
+ "localhost\r\n" +
+ $"{port}\r\n" +
+ $"{tenant}\r\n" +
+ $"{username}\r\n" +
+ $"{password}\r\n";
+
+ File.WriteAllText(pathToFile, text);
+ }
+
public static void WriteLog(string message, string logFilePath)
{
if(string.IsNullOrEmpty(logFilePath) || !Directory.Exists(logFilePath))
diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj
index 17c59fee5..6cfc92ee2 100644
--- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj
+++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj
@@ -5129,7 +5129,7 @@
- True
+ False
False
8808
/
diff --git a/ReportImp/HPHBersenbrueck/HPHBersenbrueck.csproj b/ReportImp/HPHBersenbrueck/HPHBersenbrueck.csproj
index af13a2822..0894f15c4 100644
--- a/ReportImp/HPHBersenbrueck/HPHBersenbrueck.csproj
+++ b/ReportImp/HPHBersenbrueck/HPHBersenbrueck.csproj
@@ -117,6 +117,7 @@
ServicesOverviewReport.cs
+
Component
diff --git a/ReportImp/HPHBersenbrueck/Service/HphServiceRecordStatisticFactory.cs b/ReportImp/HPHBersenbrueck/Service/HphServiceRecordStatisticFactory.cs
new file mode 100644
index 000000000..5ef8730d4
--- /dev/null
+++ b/ReportImp/HPHBersenbrueck/Service/HphServiceRecordStatisticFactory.cs
@@ -0,0 +1,325 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.DCEntityMapper;
+using BeWo.Service.Plugins;
+using BS.Shared;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using BS.Shared.Extensions;
+using BS.Shared.Services;
+using HPHBersenbrueck.Calculations;
+
+namespace HphBersenbrueck.Service
+{
+ public class HphServiceRecordStatisticFactory : ServiceRecordStatisticFactory
+ {
+ private bool containsNeueQA = false;
+ private const String NEUE_QA_KATEGORIE = "Neu Qualifizierte Assistenz";
+ private IEnumerable allServiceRecords = null;
+ private IList allServiceRecordDCs = new List();
+
+ public HphServiceRecordStatisticFactory()
+ {
+
+ }
+ public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate)
+ {
+ if (!HatNeueQA(costBearer2SupportConceptOid, statisticsDate))
+ {
+ return null;
+ }
+ var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
+
+
+ var dc = new ServiceRecordStatisticsInfoDC();
+
+ dc.Header = new string[4];
+ dc.Header[0] = "Bewilligungszeitraum:";
+ dc.Header[1] = "Geleistet diese Woche/Gesamt:";
+ dc.Header[2] = "Bewilligt pro Woche/Gesamt:";
+ dc.Header[3] = "Frei pro Woche/Gesamt:";
+
+
+ dc.ForegroundColor = new string[4];
+ for (int i = 0; i < 4; i++)
+ {
+ dc.ForegroundColor[i] = "#FF2B508B";
+ }
+
+
+ dc.PeriodStatisticInfos = new List();
+
+
+ if (stats != null)
+ {
+ foreach (var pdc in stats.PeriodStatistics)
+ {
+ if (pdc.SupportConceptApprovalPeriod != null && pdc.SupportConceptApprovalPeriod.ServiceCategory != null && pdc.SupportConceptApprovalPeriod.ServiceCategory.Name == NEUE_QA_KATEGORIE)
+ {
+ ErstelleAlleStatistikenFuerNeueQA(statisticsDate, dc, stats, pdc);
+ }
+ else
+ {
+ String header = "";
+ if (pdc.SupportConceptApprovalPeriod != null)
+ {
+ header = String.Format("{0:dd.MM.yy} - {1:dd.MM.yy}", pdc.SupportConceptApprovalPeriod.StartDate, pdc.SupportConceptApprovalPeriod.EndDate);
+
+ if (pdc.SupportConceptApprovalPeriod.ServiceCategory != null)
+ {
+ if (pdc.SupportConceptApprovalPeriod.StartDate.HasValue && pdc.SupportConceptApprovalPeriod.EndDate.HasValue &&
+ pdc.SupportConceptApprovalPeriod.StartDate.Value.Date == stats.StatisticsStartDate.Date &&
+ pdc.SupportConceptApprovalPeriod.EndDate.Value.Date == stats.StatisticsEndDate.Date)
+ {
+ header = pdc.SupportConceptApprovalPeriod.ServiceCategory.Name;
+ }
+ else
+ {
+ header = String.Format("{0}: {1:dd.MM.yy} - {2:dd.MM.yy}",
+ pdc.SupportConceptApprovalPeriod.ServiceCategory.Name,
+ pdc.SupportConceptApprovalPeriod.StartDate,
+ pdc.SupportConceptApprovalPeriod.EndDate);
+ }
+ }
+ }
+ dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, header));
+ }
+
+ }
+ }
+
+ return dc;
+ }
+
+ private void ErstelleAlleStatistikenFuerNeueQA(DateTime statisticsDate, ServiceRecordStatisticsInfoDC dc, SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC pdc)
+ {
+ //Eine Stunden der neuen QA wird unterteilt in 50 Min direkt, 10 Min Mittelbar, 6 Min indirekt und 15 Min Fahrtzeit
+ var statsDirekt = new SupportConceptPeriodStatisticsDC();
+ var statsMittelbar = new SupportConceptPeriodStatisticsDC();
+ var statsIndirekt = new SupportConceptPeriodStatisticsDC();
+ var statsFahrtzeit = new SupportConceptPeriodStatisticsDC();
+
+ statsDirekt.MinutesApprovedPerWeek = pdc.MinutesApprovedPerWeek / 1.2m; //60 min. bewilligt sind 50 min. direkt
+ statsDirekt.MinutesApprovedTotal = pdc.MinutesApprovedTotal / 1.2m;
+ statsDirekt.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow / 1.2m;
+ statsDirekt.SupportConceptApprovalPeriod = pdc.SupportConceptApprovalPeriod;
+
+ statsMittelbar.MinutesApprovedPerWeek = pdc.MinutesApprovedPerWeek / 6m; //60 min. bewilligt sind 10 min. mittelbar
+ statsMittelbar.MinutesApprovedTotal = pdc.MinutesApprovedTotal / 6m;
+ statsMittelbar.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow / 6m;
+ statsMittelbar.SupportConceptApprovalPeriod = pdc.SupportConceptApprovalPeriod;
+
+ statsIndirekt.MinutesApprovedPerWeek = pdc.MinutesApprovedPerWeek / 10m; //60 min. bewilligt sind 6 min. indirekt
+ statsIndirekt.MinutesApprovedTotal = pdc.MinutesApprovedTotal / 10m;
+ statsIndirekt.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow / 10m;
+ statsIndirekt.SupportConceptApprovalPeriod = pdc.SupportConceptApprovalPeriod;
+
+ statsFahrtzeit.MinutesApprovedPerWeek = pdc.MinutesApprovedPerWeek / 4m; //60 min. bewilligt sind 15. Fahrtzeit
+ statsFahrtzeit.MinutesApprovedTotal = pdc.MinutesApprovedTotal / 4m;
+ statsFahrtzeit.ApprovedMinutesTillNow = pdc.ApprovedMinutesTillNow / 4m;
+ statsFahrtzeit.SupportConceptApprovalPeriod = pdc.SupportConceptApprovalPeriod;
+
+ BerechneGeleisteteStunden(statisticsDate, statsDirekt, "50 direkte Leistung");
+ BerechneGeleisteteStunden(statisticsDate, statsMittelbar, "10 direkte Leistung");
+ BerechneGeleisteteStunden(statisticsDate, statsIndirekt, "6 indirekte Leistung");
+ BerechneGeleisteteStunden(statisticsDate, statsFahrtzeit, "15 Fahrzeit");
+
+
+ dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsDirekt, " Direkte Leistung"));
+ dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsMittelbar, " Mittelbare Leistung"));
+ dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsIndirekt, " Indirekte Leistung"));
+ dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, statsFahrtzeit, " Fahrzeit "));
+ }
+
+ private void BerechneGeleisteteStunden(DateTime statisticsDate, SupportConceptPeriodStatisticsDC pdc, string leistung)
+ {
+ var calc = new HPHBCalculations();
+
+ decimal minutenGesamt = 0;
+ decimal minutenDieseWoche = 0;
+
+ var firstOfMonthDt = new DateTime(statisticsDate.Year, statisticsDate.Month, 1);
+ DateTime mondayDt = statisticsDate.GetLast(DayOfWeek.Monday).Date;
+ DateTime sundayDt = statisticsDate.GetNext(DayOfWeek.Sunday).Date;
+
+
+
+ foreach (var sr in allServiceRecordDCs)
+ {
+ if (sr.ServiceDescription.Name == leistung)
+ {
+ var minuten = calc.GetBillableDurationInMinutes(sr, false);
+ minutenGesamt += minuten;
+
+ if (sr.Start >= mondayDt && sr.Start < mondayDt.AddDays(7))
+ {
+ minutenDieseWoche += minuten;
+ }
+ }
+ }
+
+ pdc.MinutesProvidedTotalRounded = minutenGesamt;
+ pdc.MinutesProvidedTotal = minutenGesamt;
+ pdc.MinutesProvidedThisWeek = minutenDieseWoche;
+
+ DateTime dtPeriod = statisticsDate.Date;
+ if (pdc.SupportConceptApprovalPeriod.StartDate.HasValue && pdc.SupportConceptApprovalPeriod.StartDate > dtPeriod)
+ {
+ dtPeriod = pdc.SupportConceptApprovalPeriod.StartDate.Value;
+ }
+
+ TimeSpan tsPeriod = pdc.SupportConceptApprovalPeriod.EndDate.Value.Subtract(dtPeriod);
+ int daysPeriod = tsPeriod.Days + 1;
+ if (daysPeriod < 0)
+ daysPeriod = 0;
+
+ if (daysPeriod != 0)
+ {
+ pdc.MinutesFreePerWeek = (pdc.MinutesApprovedTotal - pdc.MinutesProvidedTotalRounded) / (daysPeriod / 7m);
+ }
+ else
+ {
+ pdc.MinutesFreePerWeek = (pdc.MinutesApprovedTotal - pdc.MinutesProvidedTotalRounded);
+ }
+
+
+ }
+
+ protected override IEnumerable GetServiceRecordsForStatistic(long costBearer2SupportConceptOid)
+ {
+ var allServiceRecords = base.GetServiceRecordsForStatistic(costBearer2SupportConceptOid);
+ return allServiceRecords;
+ }
+
+ protected override ServiceRecordDC MapToServiceRecordDCForStatistic(ServiceRecord pEntity)
+ {
+ var dc = base.MapToServiceRecordDCForStatistic(pEntity);
+ allServiceRecordDCs.Add(dc);
+
+ return dc;
+ }
+ public override SupportConceptStatisticsDC CreateSupportConceptStatisticsImpl(long costBearer2SupportConceptOid,
+ DateTime statisticsDate, long? ignoreServiceRecordOid)
+ {
+ var stats = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
+
+ return stats;
+ }
+
+ public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, String header)
+ {
+ var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
+
+ dc.LeftValues[0] = header;
+
+
+ dc.LeftValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedThisWeek / 60);
+ dc.RightValues[1] = String.Format("{0:0.00}", periodStats.MinutesProvidedTotalRounded / 60);
+
+ dc.LeftValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedPerWeek / 60);
+ dc.RightValues[2] = String.Format("{0:0.00}", periodStats.MinutesApprovedTotal / 60);
+
+ dc.LeftValues[3] = String.Format("{0:0.00}", periodStats.MinutesFreePerWeek / 60);
+
+ var freeTotal = (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded);
+
+ dc.RightValueColors[3] = "#FF008000";
+ if (periodStats.MinutesApprovedTotal > 0)
+ {
+ var percent = (freeTotal / periodStats.MinutesApprovedTotal);
+ if (percent < 0.2m)
+ {
+ dc.RightValueColors[3] = "#FFFF0000";
+ }
+ }
+
+ dc.RightValues[3] = String.Format("{0:0.00}", freeTotal / 60);
+
+ return dc;
+ }
+
+
+
+ public override SupportConceptStatisticsDC CreateSupportConceptStatistics(long costBearer2SupportConceptOid, DateTime statisticsDate)
+ {
+ if (HatNeueQA(costBearer2SupportConceptOid, statisticsDate))
+ {
+ return null;
+ }
+ return base.CreateSupportConceptStatistics(costBearer2SupportConceptOid, statisticsDate);
+ }
+
+
+ private bool HatNeueQA(long costBearer2SupportConceptOid, DateTime statisticsDate)
+ {
+ if (containsNeueQA)
+ {
+ return true;
+ }
+ var cb2sc = DAOFactory.GenericDAO.LoadByID(costBearer2SupportConceptOid);
+ foreach (var scap in cb2sc.ApprovalPeriodList)
+ {
+ if (scap.ServiceCategory != null && scap.ServiceCategory.Name == NEUE_QA_KATEGORIE)
+ {
+ containsNeueQA = true;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public override decimal GetApprovedMinutesPerMonth(SupportConceptPeriodStatisticsDC periodStats)
+ {
+ if (periodStats.SupportConceptApprovalPeriod != null)
+ {
+ if (periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.HasValue &&
+ periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.HasValue)
+ {
+ var be = periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value;
+ switch (periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.Value)
+ {
+ case SupportConceptApprovalInterval.Daily:
+ be *= 30;
+ break;
+ case SupportConceptApprovalInterval.Weekly:
+ be *= 4.34m;
+ break;
+ case SupportConceptApprovalInterval.Fortnightly:
+ be *= 4.34m / 2;
+ break;
+ case SupportConceptApprovalInterval.Monthly:
+ break;
+ case SupportConceptApprovalInterval.Quarterly:
+ be /= 3;
+ break;
+ case SupportConceptApprovalInterval.HalfYearly:
+ be /= 6;
+ break;
+ case SupportConceptApprovalInterval.Yearly:
+ be /= 12;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+
+ return be*60;
+ }
+ }
+ return base.GetApprovedMinutesPerMonth(periodStats);
+ }
+
+ public override decimal GetApprovedMinutesPerMonth(SupportConceptStatisticsDC stats)
+ {
+ if (stats.PeriodStatistics != null)
+ {
+ return stats.PeriodStatistics.Sum(p => p.MinutesApprovedPerMonth);
+ }
+ return base.GetApprovedMinutesPerMonth(stats);
+ }
+
+ }
+}
diff --git a/ReportImp/Nous/Service/GroupDurationCalculator.cs b/ReportImp/Nous/Service/GroupDurationCalculator.cs
new file mode 100644
index 000000000..eb740cfb2
--- /dev/null
+++ b/ReportImp/Nous/Service/GroupDurationCalculator.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.Plugins;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+
+namespace Nous.Service
+{
+ public class CustomGroupDurationCalculator : GroupDurationCalculator
+ {
+
+ public override GroupDurationDC CalculateGroupDuration(int personCount, int employeeCount, decimal totalDuration)
+ {
+ return new GroupDurationDC()
+ {
+ SingleDuration = ((totalDuration*employeeCount)/personCount),
+ TotalDuration = totalDuration
+ };
+ }
+ }
+}
diff --git a/ReportImp/PZDDuesseldorf/Invoicing/CustomAccountingService.cs b/ReportImp/PZDDuesseldorf/Invoicing/CustomAccountingService.cs
new file mode 100644
index 000000000..a0df0dbb1
--- /dev/null
+++ b/ReportImp/PZDDuesseldorf/Invoicing/CustomAccountingService.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Windows;
+using BeWo.Data;
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.DCEntityMapper;
+using BeWo.Service.Plugins;
+using BS.Shared;
+using BS.Shared.DataContracts;
+using NHibernate;
+using NHibernate.Criterion;
+
+namespace PZDDuesseldorf.Service
+{
+ public class CustomAccountingService : AccountingService
+ {
+ public override ServiceInvoice ErstelleStornoRechnung(InvoiceBaseDC ibdc)
+ {
+ var i = base.ErstelleStornoRechnung(ibdc);
+
+ SetzeRechnungsnummer(i.InvoiceBase, ibdc);
+ i.InvoiceBase.StornoInvoiceBaseOid = ibdc.InvoiceBaseOid.Value;
+ DAOFactory.GenericDAO.Insert(i);
+
+ var original = DAOFactory.GenericDAO.LoadByID(ibdc.InvoiceBaseOid.Value);
+ original.StornoInvoiceBaseOid = i.Oid;
+ DAOFactory.GenericDAO.Update(original);
+
+ return i;
+ }
+
+ public override InvoiceBase ErstelleStornoAllgemeineRechnung(InvoiceBaseDC ibdc)
+ {
+ var i = base.ErstelleStornoAllgemeineRechnung(ibdc);
+
+ SetzeRechnungsnummer(i, ibdc);
+ i.StornoInvoiceBaseOid = ibdc.InvoiceBaseOid.Value;
+
+ DAOFactory.GenericDAO.Insert(i);
+
+ var original = DAOFactory.GenericDAO.LoadByID(ibdc.InvoiceBaseOid.Value);
+ original.StornoInvoiceBaseOid = i.Oid;
+
+ DAOFactory.GenericDAO.Update(original);
+
+ return i;
+ }
+
+ //public override InvoiceBase ErstelleStornoSpitzabrechnung(InvoiceBaseDC ibdc)
+ //{
+ // var i = base.ErstelleStornoSpitzabrechnung(ibdc);
+
+ // SetzeRechnungsnummer(i, ibdc);
+ // DAOFactory.GenericDAO.Insert(i);
+ // return i;
+ //}
+
+ private void SetzeRechnungsnummer(InvoiceBase neu, InvoiceBaseDC alt)
+ {
+ if (!String.IsNullOrEmpty(neu.InvoiceNumber))
+ {
+ neu.InvoiceNumber = alt.InvoiceNumber + " Storno";
+ }
+
+ if (String.IsNullOrEmpty(neu.InvoiceTypeText))
+ {
+ neu.InvoiceTypeText = "Storno";
+ }
+ else
+ {
+ neu.InvoiceTypeText = "Storno " + neu.InvoiceTypeText;
+ }
+
+
+ neu.InvoiceDate = DateTime.Now;
+ }
+
+ public override List GetInvoiceBases(DateTime? startDate, DateTime? endDate, bool filterByInvoiceDate)
+ {
+ DateTime? end = endDate;
+ if (end.HasValue)
+ {
+ end = end.Value.Date.AddDays(1).AddTicks(-1);
+ }
+
+ var lCriteria = this.Session.CreateCriteria(typeof(InvoiceBase));
+ if (filterByInvoiceDate)
+ {
+ if (startDate.HasValue)
+ lCriteria.Add(Restrictions.Ge(InvoiceBase.PropertyName_InvoiceDate, startDate));
+ if (endDate.HasValue)
+ lCriteria.Add(Restrictions.Le(InvoiceBase.PropertyName_InvoiceDate, endDate));
+ }
+ else
+ {
+ if (startDate.HasValue)
+ lCriteria.Add(Restrictions.Ge(InvoiceBase.PropertyName_AccountingPeriodEnd, startDate));
+ if (endDate.HasValue)
+ lCriteria.Add(Restrictions.Le(InvoiceBase.PropertyName_AccountingPeriodStart, endDate));
+ }
+
+ var list = lCriteria.List();
+
+ return MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDCs(list);
+ }
+
+ private ISession Session
+ {
+ get
+ {
+ if (HttpContext.Current == null)
+ {
+ // WCF Request
+ // DefaultHibernateSessionManager, wenn der SessionOperationContext null ist
+
+ return WCFHibernateSessionManager.CurrentSession ?? DefaultHibernateSessionManager.CurrentSession;
+ }
+ else
+ {
+ // ASP Request
+ return HttpContext.Current.Items["hibernateSession"] as ISession;
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ReportImp/PZDDuesseldorf/PZDDuesseldorf.csproj b/ReportImp/PZDDuesseldorf/PZDDuesseldorf.csproj
index 8a3ca62e7..c629d6fe8 100644
--- a/ReportImp/PZDDuesseldorf/PZDDuesseldorf.csproj
+++ b/ReportImp/PZDDuesseldorf/PZDDuesseldorf.csproj
@@ -36,9 +36,14 @@
+
+ False
+ ..\..\Lib\NHibernate.dll
+
+
@@ -51,6 +56,7 @@
+
Component
diff --git a/Service/Configuration/AppSettings.cs b/Service/Configuration/AppSettings.cs
index e172d8593..3202b91ef 100644
--- a/Service/Configuration/AppSettings.cs
+++ b/Service/Configuration/AppSettings.cs
@@ -213,7 +213,7 @@ namespace BeWo.Service.Configuration
printerSettingsUsePaperKind = true;
}
- val = GetSettingValue(mandator.Settings, "ShowSignatures");
+ val = GetSettingValue(mandator.Settings, "ShowSignature");
if (val != null && val.Equals("1"))
{
showSignatures = true;
diff --git a/Service/Plugins/PluginLoader.cs b/Service/Plugins/PluginLoader.cs
index a61c77988..0c2abc522 100644
--- a/Service/Plugins/PluginLoader.cs
+++ b/Service/Plugins/PluginLoader.cs
@@ -47,7 +47,7 @@ namespace BeWo.Service.Plugins
//t = "2301474784"; // Hauskrankenpflege Leiendecker
//t = "8243565510"; // Der Karren
//t = "7709306800"; // Der Karren SBD
- //t = "2499262621"; // HPH Bersenbrück
+ t = "2499262621"; // HPH Bersenbrück
//t = "4950382346"; // Holsinger
//t = "5973016645"; // Verein Lebensgestaltung Hanau
//t = "7375324044"; // Diakonie KK Kleve
@@ -349,7 +349,7 @@ namespace BeWo.Service.Plugins
//t = "3226307161"; // Roman Roger Puth
//t = "3522103738"; // AWO Münsterland-Recklinghausen
//t = "5592509446"; // Kontakt Verein für psychosoziale Hilfen e.V
- //t = "5344902949"; // SHK Service GmbH SBD
+ t = "5344902949"; // SHK Service GmbH SBD
//t = "1422963536"; // Malteser-Johanniter-Johanneshaus gGmbH
//t = "5433105975"; // aha e.V.
//t = "1701920223"; // SKFM Monheim
diff --git a/Service/Plugins/VacationService.cs b/Service/Plugins/VacationService.cs
index ad64402ed..176e0b43e 100644
--- a/Service/Plugins/VacationService.cs
+++ b/Service/Plugins/VacationService.cs
@@ -88,12 +88,12 @@ namespace BeWo.Service.Plugins
if (bundesland.ToLower() == "bayern")
{
+ //list.Add(new FeiertagDC { Datum = new DateTime(year, 8, 15), Name = "Mariä Himmelfahrt" });
list.Add(new FeiertagDC { Datum = new DateTime(year, 1, 6), Name = "Heilige Drei Könige" });
}
if (bundesland.ToLower() == "nrw" || bundesland.ToLower() == "bayern")
{
- list.Add(new FeiertagDC { Datum = new DateTime(year, 8, 15), Name = "Mariä Himmelfahrt" });
list.Add(new FeiertagDC { Datum = new DateTime(year, 11, 1), Name = "Allerheiligen" });
}
diff --git a/Service/SBD/VertretungsManager.cs b/Service/SBD/VertretungsManager.cs
index 9e45cc586..89a2ca3c4 100644
--- a/Service/SBD/VertretungsManager.cs
+++ b/Service/SBD/VertretungsManager.cs
@@ -147,6 +147,10 @@ namespace BeWo.Service.SBD
{
var customer = employee2Customer.Customer;
var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
+ if (customer.Person.LastName == "Schatz")
+ {
+
+ }
var customerContactInformationList = LoadContactInformationForEntity(customer.Person);
var c2oList = customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value))).ToList();
var schools = MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(c2oList);
@@ -237,6 +241,11 @@ namespace BeWo.Service.SBD
foreach (var absenceTime in customerAbsenceTimes)
{
var customer = customers.FirstOrDefault(first => first.Oid.HasValue && first.Oid.Equals(absenceTime.CustomerOid)) ?? DAOFactory.GenericDAO.LoadByID(absenceTime.CustomerOid.Value);
+
+ if (customer.Person.LastName == "Schatz")
+ {
+
+ }
var absenceTimeDC = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime);
var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
var customerContactInformationList = LoadContactInformationForEntity(customer.Person);
@@ -358,7 +367,7 @@ namespace BeWo.Service.SBD
}
// TODO: Hat die vertretungsItemListe Objekte mit dem Klienten im selben Zeitfenster?
- foreach (var employeeVertretungsItem in employeeVertretungsItems.Where(w => w.Customer.Equals(customerDC)))
+ foreach (var employeeVertretungsItem in employeeVertretungsItems.Where(w => w.Customer.Equals(customerDC) && w.Employee != null && w.Employee.EmployeeOid == employeeDC.EmployeeOid))
{
if (employeeVertretungsItem.Datum == dateTime)
{
diff --git a/Shared/DataContracts/MedArtDC.cs b/Shared/DataContracts/MedArtDC.cs
index 331558436..253f11aeb 100644
--- a/Shared/DataContracts/MedArtDC.cs
+++ b/Shared/DataContracts/MedArtDC.cs
@@ -28,7 +28,7 @@ namespace BS.Shared.DataContracts
if (MedArtOid != null && y.MedArtOid != null)
return MedArtOid == y.MedArtOid;
- return Bezeichnung.Equals(y.Bezeichnung) && BezeichnungLang.Equals(y.BezeichnungLang);
+ return Bezeichnung != null && Bezeichnung.Equals(y.Bezeichnung) && BezeichnungLang != null && BezeichnungLang.Equals(y.BezeichnungLang);
}
public override int GetHashCode()