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()