diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj
index f935677e7..d487dd916 100644
--- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj
+++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj
@@ -15,7 +15,7 @@
BeWoPlanerMobil
v4.5
false
- true
+ false
@@ -276,7 +276,7 @@
False
8808
/
- http://localhost:8808/
+ http://localhost/BeWoPlanerMobil
False
False
diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user
index 65f36bd35..5cffa0aed 100644
--- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user
+++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user
@@ -1,7 +1,7 @@
- true
+ false
diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs
index 0ad86dcf6..f45c2f4cc 100644
--- a/BeWoPlanerMobil/Controllers/MainController.cs
+++ b/BeWoPlanerMobil/Controllers/MainController.cs
@@ -1936,6 +1936,8 @@ namespace BeWoPlanerMobil.Controllers
var splitSettings = settings.Split(';');
var maxDaysEditSRsAllowedSetting = splitSettings.ToList().FirstOrDefault(f => f.Contains("MaxDaysEditServiceRecordsAllowed"));
var maxDaysEditSRsAllowed = maxDaysEditSRsAllowedSetting != null ? int.Parse(maxDaysEditSRsAllowedSetting.Split('=')[1]) : 0;
+ var limitFuerZeiterfassungSetting = splitSettings.ToList().FirstOrDefault(f => f.Contains("AnzTageZeiterfassErfolgt"));
+ var limitFuerZeiterfassung = limitFuerZeiterfassungSetting != null ? limitFuerZeiterfassungSetting.Split('=')[1] : "0";
SupportConceptStatisticsDC stats = null;
@@ -1948,7 +1950,8 @@ namespace BeWoPlanerMobil.Controllers
var newResult = new ValidationResult();
- //if (checkSR.GroupOid.HasValue)
+ string dateRangeString;
+
if(Model.IsInGroupBookingMode)
{
if (checkSR.GroupOid.HasValue)
@@ -1988,17 +1991,22 @@ namespace BeWoPlanerMobil.Controllers
}
var result = OperationsService.ValidateServiceRecord(checkSR, stats, maxDaysEditSRsAllowed, employees, cb2scOids);
- newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result));
+ dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : "";
+
+ newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result, dateRangeString));
}
}
else
{
+ var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(Model.SelectedSupportConcept.SupportConceptOid.Value, Model.SelectedEmployee.EmployeeOid), null);
+ dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : "";
+
var result = OperationsService.ValidateServiceRecordEntry(checkSR, stats, maxDaysEditSRsAllowed, checkSR.GroupOid.HasValue, employees);
- newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result));
+ newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result, dateRangeString));
}
- newResult.Rights = new Dictionary();
newResult.MaxDaysEditServiceRecordsAllowed = maxDaysEditSRsAllowed.ToString();
+ newResult.LimitFuerZeiterfassung = limitFuerZeiterfassung;
newResult.Rights.Add(0, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateOverlappingFLS))));
newResult.Rights.Add(1, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateMoreFLSThanApproved))));
@@ -2217,6 +2225,11 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public ActionResult SetGroupBookingMode(FormCollection pFormCollection)
{
+ if (Model == null)
+ {
+ return RedirectToActionPermanent("Index", "Login");
+ }
+
var isInGroupBookingMode = "true,false" == pFormCollection["IsInGroupBookingMode"];
ResetGroupBookingMode(isInGroupBookingMode);
@@ -2226,6 +2239,12 @@ namespace BeWoPlanerMobil.Controllers
private void ResetGroupBookingMode(bool pIsInGroupBookingMode)
{
+ if (Model == null)
+ {
+ RedirectToActionPermanent("Index", "Login");
+ return;
+ }
+
Model.IsInGroupBookingMode = pIsInGroupBookingMode;
if (pIsInGroupBookingMode)
@@ -2267,6 +2286,11 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public ActionResult ResetEditingMode(FormCollection pFormCollection)
{
+ if (Model == null)
+ {
+ return RedirectToActionPermanent("Index", "Login");
+ }
+
Model.NewServiceRecord = new ServiceRecordDC();
Model.SelectedServiceRecord = null;
Model.SelectedSupportConcepts.Clear();
@@ -2279,6 +2303,12 @@ namespace BeWoPlanerMobil.Controllers
public string LoadCategoryAndDescription()
{
+ if (Model == null)
+ {
+ RedirectToActionPermanent("Index", "Login");
+ return null;
+ }
+
if (Model.SelectedServiceRecord == null)
{
return null;
@@ -2296,7 +2326,7 @@ namespace BeWoPlanerMobil.Controllers
{
if (Model == null)
{
- return RedirectToAction("Main");
+ return RedirectToActionPermanent("Index", "Login");
}
var oids = new List();
@@ -2322,6 +2352,11 @@ namespace BeWoPlanerMobil.Controllers
[HttpPost]
public ActionResult AddSupportConceptsToGroupBooking(FormCollection pFormCollection)
{
+ if (Model == null)
+ {
+ return RedirectToActionPermanent("Index", "Login");
+ }
+
var relOids = new List();
var groups = new List();
@@ -2381,6 +2416,12 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public string ResetGroupBookingModeViaGET()
{
+ if (Model == null)
+ {
+ RedirectToActionPermanent("Index", "Login");
+ return null;
+ }
+
Model.IsInGroupBookingMode = false;
Model.SelectedCostbearerRelOids.Clear();
Model.SelectedEmployees.Clear();
diff --git a/BeWoPlanerMobil/Scripts/mainView.js b/BeWoPlanerMobil/Scripts/mainView.js
index 8516c4d82..192c74b03 100644
--- a/BeWoPlanerMobil/Scripts/mainView.js
+++ b/BeWoPlanerMobil/Scripts/mainView.js
@@ -598,11 +598,10 @@ function validateServiceRecordBeforeSubmit() {
}
});
-
for (var j = 0; j < relations.length; j++) {
results = relations[j].ValidationResults;
-
var exitLoop = false;
+
for (var i = 0; i < results.length; i++) {
if (exitLoop) {
break;
@@ -610,74 +609,101 @@ function validateServiceRecordBeforeSubmit() {
switch (results[i].ResultType) {
case 0:
- var msg1 = 'An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Speichern nicht möglich.';
+ // ServiceRecordOverlapping: ServiceRecord überschneidet sich mit einem anderen Eintrag
+ var msg1 = "An dem gewählten Datum '" + vonDatum + "' existiert bereits ein Eintrag (" + results[i].Message + " bei Klient/in " + results[i].CustomerName + "). Speichern nicht möglich.";
if (allowOverlappingFLS === true) {
- var r = confirm('An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Möchten Sie trotzdem speichern?');
+ var r = confirm("An dem gewählten Datum '" + vonDatum + "' existiert bereits ein Eintrag (" + results[i].Message + " bei Klient/in " + results[i].CustomerName + "). Möchten Sie trotzdem speichern?");
isValidRecord = r;
exitLoop = !isValidRecord;
} else {
- writeFatalErrorMessage(msg1);
+ alert(msg1);
isValidRecord = false;
exitLoop = true;
}
break;
case 1:
- var msg2 = 'An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Speichern nicht möglich.';
+ // EmployeeOverlapping: Employee hat einen mit diesem Eintrag sich überschneidenden Eintrag
+ var msg2 = "An dem gewählten Datum " + vonDatum + " existiert bereits ein Eintrag von " + results[i].EmployeeName + "(" + results[i].Message + "). Speichern nicht möglich.";
if (allowOverlappingFLS === true) {
- var r2 = confirm('An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Möchten Sie trotzdem speichern?');
+ var r2 = confirm("An dem gewählten Datum " + vonDatum + " existiert bereits ein Eintrag von " + results[i].EmployeeName + "(" + results[i].Message + "). Möchten Sie trotzdem speichern?");
isValidRecord = r2;
exitLoop = !isValidRecord;
} else {
- writeFatalErrorMessage(msg2);
+ alert(msg2);
isValidRecord = false;
exitLoop = true;
}
break;
case 2:
- writeFatalErrorMessage('Das gewählte Datum ' + vonDatum.slice(0, 10) + ' liegt außerhalb des Zeitraumes des gewählten Hilfeplans. Speichern nicht möglich.');
+ // OutsideOfSupportConcept: Der Eintrag liegt außerhalb des Hilfeplanzeitraumes
+ alert("Das gewählte Datum " + vonDatum.slice(0, 10) + " liegt außerhalb des Zeitraumes des gewählten Hilfeplans (" + relations[j].HilfePlanZeitraum + "). Speichern nicht möglich.");
+ //writeFatalErrorMessage("Das gewählte Datum " + vonDatum.slice(0, 10) + " liegt außerhalb des Zeitraumes des gewählten Hilfeplans (" + relations[j].HilfePlanZeitraum + "). Speichern nicht möglich.");
isValidRecord = false;
exitLoop = true;
break;
case 3:
- var msg3 = 'Die für diesen Hilfeplan genehmigten FLS (' + results[i].ApprovedHours + ') werden mit diesem Eintrag überschritten. (' + results[i].HoursNew + ').';
+ // ApprovedFLSOverspending: Die Anzahl der genehmigten FLS wird überschritten
+ var klient = "diesen Hilfeplan";
+ if (results[i].CustomerName !== null && results[i].CustomerName.length >= 0) {
+ klient = "Klient/in " + results[i].CustomerName;
+ }
+
+ var msg3 = "Die für " + klient + " genehmigten FLS (" + results[i].ApprovedHours + ") werden mit diesem Eintrag überschritten. (" + results[i].HoursNew + ").";
if (allowMoreFLSThanApproved === true) {
var r3 = confirm(msg3 + " Möchten Sie trotzdem speichern?");
isValidRecord = r3;
exitLoop = !isValidRecord;
} else {
- writeFatalErrorMessage(msg3);
+ alert(msg3);
isValidRecord = false;
exitLoop = true;
}
break;
case 4:
- writeFatalErrorMessage('Sie können keine neuen Leistungen für den ' + vonDatum + ' dokumentieren, da bereits der ' + meldungen.MaxDaysEditServiceRecordsAllowed + '. des nachfolgenden Monats überschritten ist.');
+ // OutOfEditLimit: MaxDaysEditServiceRecordAllowed überschritten
+ alert("Sie können keine neuen Leistungen für den " + vonDatum + " dokumentieren, da bereits der " + meldungen.MaxDaysEditServiceRecordsAllowed + ". des nachfolgenden Monats überschritten ist.");
isValidRecord = false;
exitLoop = true;
break;
case 5:
- writeFatalErrorMessage("Beim Speichern ist ein Fehler aufgetreten. Speichern nicht möglich.");
+ // Error: Ein genereller Fehler ist bei der Validierung aufgetreten
+ alert("Beim Speichern ist ein Fehler aufgetreten. Speichern nicht möglich.");
isValidRecord = false;
exitLoop = true;
break;
case 6:
- var msg6 = "Es existiert bereits eine Spitzabrechnung. Um diesen Eintrag zu berücksichtigen, muss eventuell eine neue Spitzabrechnung erstellt werden. Das Speichern ist nicht möglich.";
- if (bookAfterSettlementInvoice === true) {
- msg6 = "Sie können den Eintrag nicht bearbeiten, da bereits eine Spitzabrechnung für diesen Hilfeplan erstellt wurde. Speichern nicht möglich.";
+ // SettlementInvoiceAlreadyExisting: Es existiert bereits eine Spitzabrechnung
+ var klient2 = "diesen Hilfeplan";
+ if (results[i].CustomerName !== null && results[i].CustomerName.length >= 0) {
+ klient2 = "Klient/in " + results[i].CustomerName;
}
- writeFatalErrorMessage(msg6);
+
+ var msg6 = "Es existiert bereits eine Spitzabrechnung für " + klient2 + ". Um diesen Eintrag zu berücksichtigen, muss eventuell eine neue Spitzabrechnung erstellt werden. Das Speichern ist nicht möglich.";
+ if (bookAfterSettlementInvoice === true) {
+ msg6 = "Sie können den Eintrag nicht bearbeiten, da bereits eine Spitzabrechnung für " + klient2 + " erstellt wurde. Speichern nicht möglich.";
+ }
+ alert(msg6);
isValidRecord = false;
exitLoop = true;
break;
case 7:
- var msg7 = "Sie können keine neuen Leistungen dokumentieren, da die Frist zur Bearbeitung abgelaufen ist. Das Speichern ist nicht möglich.";
- writeFatalErrorMessage(msg7);
+ // FristAbgelaufen: Die Frist zur Bearbeitung ist abgelaufen
+ var intervall = "einem Tag";
+
+ if (results[i].LimitFuerZeiterfassung !== "1") {
+ intervall = results[i].LimitFuerZeiterfassung + " Tagen";
+ }
+
+ var msg7 = "Sie können keine neuen Leistungen für den " + vonDatum + " dokumentieren, da die Zeiterfassung innerhalb von " + intervall + " erfolgen muss. Das Speichern ist nicht möglich.";
+
+ alert(msg7);
isValidRecord = false;
exitLoop = true;
break;
default:
- writeFatalErrorMessage(results[i].Message);
+ // Custom(8), da default: ServiceRecordValidationResult.Custom
+ alert(results[i].Message);
isValidRecord = false;
exitLoop = true;
break;
@@ -754,6 +780,7 @@ function initSignatureInfo(serviceRecordOid){
});
}
+// Man kann nur eine fatale Fehlermeldung auf einmal anzeigen. Ein Aufruf dieser Methode bei einem bereits angezeigten Fehler führt dazu, dass das Popup wieder unsichtbar geschaltet wird.
function writeFatalErrorMessage(msg, i) {
toggleErrorPopup(msg, i);
}
diff --git a/BeWoPlanerMobil/Util/ServiceRecord2Validation.cs b/BeWoPlanerMobil/Util/ServiceRecord2Validation.cs
new file mode 100644
index 000000000..5b7872789
--- /dev/null
+++ b/BeWoPlanerMobil/Util/ServiceRecord2Validation.cs
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+using BS.Shared.DataContracts;
+
+namespace BeWoPlanerMobil.Util
+{
+ public class ServiceRecord2Validation
+ {
+ public ServiceRecordDC ServiceRecord { get; set; }
+ public List ValidationResults { get; set; }
+ public string HilfePlanZeitraum { get; }
+
+ public ServiceRecord2Validation(ServiceRecordDC pServiceRecord, List pValidationResults, string pHilfePlanZeitraum)
+ {
+ ServiceRecord = pServiceRecord;
+ ValidationResults = pValidationResults;
+ HilfePlanZeitraum = pHilfePlanZeitraum;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BeWoPlanerMobil/Util/ValidationResult.cs b/BeWoPlanerMobil/Util/ValidationResult.cs
new file mode 100644
index 000000000..621789fe5
--- /dev/null
+++ b/BeWoPlanerMobil/Util/ValidationResult.cs
@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+
+namespace BeWoPlanerMobil.Util
+{
+ public class ValidationResult
+ {
+ public Dictionary Rights { get; set; } = new Dictionary();
+ public string MaxDaysEditServiceRecordsAllowed { get; set; }
+ public string LimitFuerZeiterfassung { get; set; } = "0";
+
+ public List ServiceRecord2Validations { get; set; } = new List();
+ }
+}
\ No newline at end of file
diff --git a/BeWoPlanerMobil/Web.config b/BeWoPlanerMobil/Web.config
index 42f97ecc5..380e28618 100644
--- a/BeWoPlanerMobil/Web.config
+++ b/BeWoPlanerMobil/Web.config
@@ -119,7 +119,7 @@
-
+