Optische und funktionelle Verbesserungen im MoK

This commit is contained in:
2025-04-11 18:02:24 +02:00
parent deda38180b
commit c40fda3fe8
25 changed files with 12059 additions and 368 deletions

View File

@@ -1924,12 +1924,12 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AiChatDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AiSettingsDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.CheckObjectDeletionResultDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ConfirmationReceiptSignatureDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstvertretungDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.DienstEintragDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstEintragDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.DienstvertretungDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ConfirmationReceiptSignatureDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.VorlagentabelleDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.VorlagentabelleDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DokumentvorlageDC))]
@@ -5825,12 +5825,12 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AiChatDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AiSettingsDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.CheckObjectDeletionResultDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ConfirmationReceiptSignatureDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstvertretungDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.DienstEintragDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DienstEintragDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.DienstvertretungDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ConfirmationReceiptSignatureDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.VorlagentabelleDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.VorlagentabelleDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.DokumentvorlageDC))]
@@ -6106,7 +6106,7 @@ namespace BeWo.ServiceProxy
"loyeeAndCustomerResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/HasConfirmationReceiptSignatureByDateAndEmp" +
"loyeeAndCustomerBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, System.DateTime start, System.DateTime end);
bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(out System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC> confirmationReceiptSignatures, long customerOid, long employeeOid, System.DateTime start, System.DateTime end, long costBearer2SupportConceptOid);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeleteDienstvertretung2", ReplyAction="http://tempuri.org/IOperationsService/DeleteDienstvertretung2Response")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeleteDienstvertretung2BeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
@@ -7686,9 +7686,9 @@ namespace BeWo.ServiceProxy
return base.Channel.CheckObjectDeletionAllowed(objectoid, tableId);
}
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, System.DateTime start, System.DateTime end)
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(out System.Collections.Generic.List<BS.Shared.DataContracts.ConfirmationReceiptSignatureDC> confirmationReceiptSignatures, long customerOid, long employeeOid, System.DateTime start, System.DateTime end, long costBearer2SupportConceptOid)
{
return base.Channel.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(customerOid, employeeOid, start, end);
return base.Channel.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(out confirmationReceiptSignatures, customerOid, employeeOid, start, end, costBearer2SupportConceptOid);
}
public bool DeleteDienstvertretung2(long empId, long wohnId, int zeile, System.DateTime date, BS.Shared.DataContracts.DienstvertretungDC dienstvertretung, System.Collections.Generic.List<BS.Shared.DataContracts.DienstEintragDC> alleDiensteintraege, System.Collections.Generic.List<BS.Shared.DataContracts.DienstvertretungDC> alleDienstvertretungen, int day, System.DateTime pflichtStart, System.DateTime pflichtEnde)

View File

@@ -182,8 +182,9 @@ textarea {
.service-record-table {
table-layout: auto;
margin-right: -15px;
margin-left: -15px;
width: 100%;
/*margin-right: -15px;
margin-left: -15px;*/
}
.service-record-table tr td:first-child {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -210,8 +210,9 @@ $font-family-sans-serif: 'Signika Negative', sans-serif;
.service-record-table {
table-layout: auto;
margin-right: -15px;
margin-left: -15px;
/*margin-right: -15px;
margin-left: -15px;*/
width: 100%;
}
.service-record-table tr td:first-child {

View File

@@ -30,7 +30,6 @@ using FormCollection = System.Web.Mvc.FormCollection;
using GoalRating = BeWoPlanerMobil.Util.GoalRating;
using Image = System.Drawing.Image;
using ServiceRecordDC = BS.Shared.DataContracts.ServiceRecordDC;
using BeWo.Data.Entities;
/*
* ToDo: Bug, wenn man auf "bearbeiten" bei einem Eintrag klickt, wird die Leistung nicht geladen
@@ -2493,7 +2492,7 @@ namespace BeWoPlanerMobil.Controllers
var result = OperationsService.ValidateServiceRecord(sr, null, maxDaysEditSRsAllowed, employeeOids, costBearer2SupportConceptOids);
dateRangeString = rel.DateRangeString;
validationResults.Add(new ServiceRecord2Validation(sr, result, dateRangeString));
validationResults.AddIfNotIn(new ServiceRecord2Validation(sr, result, dateRangeString));
}
}
else if(serviceRecordGroup != null)
@@ -2511,7 +2510,7 @@ namespace BeWoPlanerMobil.Controllers
var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(sr.SupportConcept.SupportConceptOid, Model.SelectedEmployee.EmployeeOid), null);
dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : string.Empty;
validationResults.Add(new ServiceRecord2Validation(sr, result, dateRangeString));
validationResults.AddIfNotIn(new ServiceRecord2Validation(sr, result, dateRangeString));
}
}
} // Einzelbuchung
@@ -2524,7 +2523,7 @@ namespace BeWoPlanerMobil.Controllers
}
var result = OperationsService.ValidateServiceRecord(checkServiceRecord, stats, maxDaysEditSRsAllowed, null, null);
validationResults.Add(new ServiceRecord2Validation(checkServiceRecord, result, dateRangeString ?? ""));
validationResults.AddIfNotIn(new ServiceRecord2Validation(checkServiceRecord, result, dateRangeString ?? ""));
} // Mehrfachbuchung
else if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode)
{
@@ -2551,7 +2550,7 @@ namespace BeWoPlanerMobil.Controllers
var multiBookingValidationResults = OperationsService.ValidateServiceRecord(prototype, null, maxDaysEditSRsAllowed, employeeOids, cb2ScOids);
validationResults.Add(new ServiceRecord2Validation(prototype, multiBookingValidationResults, dateRangeString));
validationResults.AddIfNotIn(new ServiceRecord2Validation(prototype, multiBookingValidationResults, dateRangeString));
}
}
@@ -2693,7 +2692,7 @@ namespace BeWoPlanerMobil.Controllers
klient3 = "Klient " + vr.CustomerName;
}
newResult.Message += $"Für den ausgewählten Zeitraum existiert bereits eine Monatsunterschrift bei {klient3}, die mit dem Anliegen dieses Eintrags verfällt und neu geleistet werden muss.<br /><br />";
newResult.Message += $"Für den ausgewählten Zeitraum existiert bereits eine Monatsunterschrift bei {klient3}, die mit dem Anlegen dieses Eintrags verfällt und neu geleistet werden muss.<br /><br />";
exitLoop = false;
newResult.KannTrotzdemGespeichertWerden = true;

View File

@@ -706,7 +706,7 @@ namespace BeWoPlanerMobil.Controllers
(Model.Customers.FirstOrDefault(f => f.CustomerOid.Equals(signature.CustomerOid))?.LastNameFirstName ?? "unbekannt") :
signature.Employee.SimpleDescription;
result.AddIfNotIn(new ConfirmationReceiptSignatureObject(img, date, personName, signature.SignatureType == SignatureType.Employee, signature.ServiceRecords.Count));
result.AddIfNotIn(new ConfirmationReceiptSignatureObject(img, date, personName, signature.SignatureType == SignatureType.Employee, signature.ServiceRecords));
}
return result;
@@ -1317,14 +1317,16 @@ namespace BeWoPlanerMobil.Controllers
public string PersonName { get; }
public bool IsEmployeeSignature { get; }
public int NumberOfServiceRecords { get; }
public List<ServiceRecordDC> ServiceRecords { get; }
public ConfirmationReceiptSignatureObject(string imageStr, string insTsStr, string personName, bool isEmployeeSignature, int numberOfServiceRecords)
public ConfirmationReceiptSignatureObject(string imageStr, string insTsStr, string personName, bool isEmployeeSignature, List<ServiceRecordDC> serviceRecords)
{
ImageStr = imageStr;
InsTsStr = insTsStr;
PersonName = personName;
IsEmployeeSignature = isEmployeeSignature;
NumberOfServiceRecords = numberOfServiceRecords;
NumberOfServiceRecords = serviceRecords.Count;
ServiceRecords = serviceRecords;
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Util.MoKExtensions;
using BS.Shared.DataContracts.ClientPartials;
using BS.Shared.DataContracts.Compact;
@@ -299,5 +300,12 @@ namespace BeWoPlanerMobil.Util
return dictionary[id] ? "show" : string.Empty;
}
public static string GetCollapsibleChevron(this HtmlHelper htmlHelper, AbstractModel model, string id)
{
model.Collapsibles2IsShown.TryGetValue(id, out var isShown);
return isShown ? "fa-chevron-up" : "fa-chevron-down";
}
}
}

View File

@@ -128,7 +128,7 @@
</div>
<input type="text" class="input-group-text px-1 form-control text-left pointer-element no-focus-outline no-selection" value="@folder.Name" readonly onclick="toggleFolderIcon(this)"/>
<div class="input-group-append">
<button class="btn btn-primary rounded-right border-dark" data-toggle="dropdown">
<button class="btn btn-primary rounded-right border-primary" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">

View File

@@ -14,31 +14,19 @@
<script type="text/javascript">
function setSelectedServiceDescription(serviceDescriptionOid) {
try {
$.get("@Url.Action("SetServiceDescription")", {pServiceDescriptionOid: serviceDescriptionOid});
} catch (error) {
showErrorPopup(error);
}
$.get("@Url.Action("SetServiceDescription")", {pServiceDescriptionOid: serviceDescriptionOid});
}
function setSelectedServiceCategory() {
try {
var selectedCategoryOid = $("#category-select").find(":selected").val();
const selectedCategoryOid = $("#category-select").find(":selected").val();
$("#category-to-description-container").load("@Url.Action("SetSelectedServiceCategory")", {categoryOidStr: selectedCategoryOid}, function() {
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
});
} catch(error) {
showErrorPopup(error);
}
$("#category-to-description-container").load("@Url.Action("SetSelectedServiceCategory")", {categoryOidStr: selectedCategoryOid}, function() {
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
});
}
$(document).ready(function() {
try {
calcPrependWidth();
} catch(error) {
showErrorPopup(error);
}
window.calcPrependWidth();
});
</script>
@@ -50,8 +38,8 @@
<!-- Kategorie -->
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="form-group mt-2 mb-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Kategorie
@@ -80,7 +68,7 @@
<!-- Leistung -->
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group mt-2 mb-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">

View File

@@ -93,24 +93,24 @@
}
<div class="mt-3">
<div class="form-row">
<div class="col-md">
<div class="alert alert-danger collapse" role="alert" id="form-alert">
<div class="form-row">
<div class="col-md">
<div class="alert alert-danger collapse" role="alert" id="form-alert">
</div>
</div>
</div>
</div>
</div>
</div>
@* Hilfepläne und Mitarbeiter *@
<div id="groupbooking-selection-container">
@Html.Partial("GroupBookingSelectionPartial", Model)
</div>
<!-- Marker -->
@* ----- Marker ----- *@
@if(Model.ShowMarker)
{
var markerCheckedValue = Model.SelectedServiceRecord?.ServiceRecordType == ServiceRecordTypeId.Content ? "checked" : string.Empty;
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" class="custom-control-input" name="marker-cb" id="marker-cb" @markerCheckedValue />
@@ -129,9 +129,9 @@
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
}
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group my-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
@@ -149,17 +149,13 @@
}
@* Trennstrich *@
<div class="form-row">
<div class="col-md">
<hr />
</div>
</div>
<hr class="py-0 mt-2 mb-0" />
@* Start- und Enddatum *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="start-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Startdatum
@@ -178,8 +174,8 @@
@if(Model.IsEndDateVisible)
{
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="end-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Enddatum
@@ -225,8 +221,8 @@
@* Von *@
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="start-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="start-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text">
Von
@@ -244,8 +240,8 @@
@* Bis *@
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="end-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="end-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text">
Bis
@@ -265,8 +261,8 @@
@* Dauer und Stunden/Minuten-Auswahl *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="form-group my-0">
<div class="input-group mt-2">
<div class="input-group-prepend">
@{
var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer";
@@ -279,7 +275,7 @@
@if(Model.IsZeiterfassungInStdMin)
{
<div class="input-group-append">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle" type="button" data-toggle="dropdown">
@Model.SelectedDurationUnit
</button>
<div class="dropdown-menu w-100">
@@ -298,8 +294,8 @@
{
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="form-group my-0">
<div class="input-group mt-2">
<div class="input-group-prepend">
<div class="input-group-text">Gefahrene Kilometer</div>
</div>
@@ -315,14 +311,14 @@
{
<div class="form-row" id="textmodule-container">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
<button type="button" class="btn btn-primary form-control mt-2" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
</div>
</div>
}
@* Dokumentation *@
<div class="form-row">
<div class="col-md mt-3">
<div class="col-md mt-2">
@if(Model.NumberOfDokuTypes == 0)
{
<div class="form-group">
@@ -359,7 +355,7 @@
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="d-flex bd-highlight mt-2">
<div class="mr-auto bd-highlight">
@* dient nur als Abstandshalter *@
</div>

View File

@@ -19,33 +19,29 @@
});
$(".hours-minutes-link").on("click", function () {
var previousText = $("#hours-minutes-dropdown-btn").data("text");
var currentText = $(this).text().replaceAll(/\s/g, "");
const previousText = $("#hours-minutes-dropdown-btn").data("text");
const currentText = $(this).text().replaceAll(/\s/g, "");
if(previousText === currentText) {
return;
}
var buttonText = $(this).text();
const buttonText = $(this).text();
$("#hours-minutes-dropdown-btn").text(buttonText);
setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
window.setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
$.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" });
calculateDuration(true, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', false, false);
});
calcPrependWidth();
window.calcPrependWidth();
});
function resetGroupBookingForm() {
try {
showSpinner();
$("#reset-group-booking-form-form").submit();
} catch(error) {
showErrorPopup(error);
}
showSpinner();
$("#reset-group-booking-form-form").submit();
}
function addEmployeeToGroupBooking() {
@@ -54,12 +50,12 @@
var oidString = "";
$("#group-booking-employee-selection-popup input:checked").each(function() {
var oid = $(this).val();
const oid = $(this).val();
selectedEmployees.push(oid);
selectedEmployees.push(oid);
});
for(var i = 0; i < selectedEmployees.length; i++) {
for(let i = 0; i < selectedEmployees.length; i++) {
oidString += selectedEmployees[i];
if(i < selectedEmployees.length - 1) {
@@ -91,7 +87,7 @@
@* ----- (Gruppenbuchung) Hilfeplan- und Gruppenauswahl Popup ----- *@
<div class="modal" data-backdrop="static" tabindex="-1" role="dialog" id="group-booking-popup">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Gruppen und Hilfepläne für Gruppenbuchung</h5>
@@ -114,7 +110,7 @@
@* ----- (Gruppenbuchung) Mitarbeiterauswahl Popup ----- *@
<div class="modal" tabindex="-1" role="dialog" id="group-booking-employee-selection-popup">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Mitarbeiter hinzufügen</h5>

View File

@@ -22,39 +22,42 @@
@* (Gruppenbuchung) Ausgewählte Hilfepläne *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-cb2sc-list">
@foreach(var selectedCb2ScRelation in Model.GroupBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item bg-bewo-task-red" id="relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span class="text-light">
@selectedCb2ScRelation.Text1
<br />
<span class="@selectedCb2ScRelation.TextColor small">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="window.removeSupportConceptCostBearerRel(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
</div>
<div class="form-group my-0">
@if(Model.GroupBookingSelectionObject.SelectedRelations.Any())
{
<div class="list-group mt-2" id="selected-cb2sc-list">
@foreach(var selectedCb2ScRelation in Model.GroupBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item bg-bewo-task-red" id="relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span class="text-light">
@selectedCb2ScRelation.Text1
<br/>
<span class="@selectedCb2ScRelation.TextColor small">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="window.removeSupportConceptCostBearerRel(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
}
</div>
</div>
</div>
@* Mitarbeiterauswahl-Button *@
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<button type="button" class="btn btn-bewo-employee btn-block" data-toggle="modal" data-target="#group-booking-employee-selection-popup" id="employees-button">
<div class="form-group my-0">
<button type="button" class="btn btn-bewo-employee btn-block mt-2" data-toggle="modal" data-target="#group-booking-employee-selection-popup" id="employees-button">
Mitarbeiter hinzufügen <span class="badge badge-light text-primary" id="selected-employees-count-badge">@Model.GroupBookingSelectedEmployees.Count</span>
</button>
</div>
@@ -64,16 +67,16 @@
@* Ziele *@
@if((Model.GroupBookingSelectedSupportConcepts?.Any() ?? false) && Model.GroupBookingSelectedSupportConcepts.Any(sc => sc.Goals.Any()))
{
<div class="form-row">
<div class="form-row my-0">
<div class="col-md">
<button type="button" class="btn btn-primary form-control my-3" data-toggle="modal" data-target="#goal-popup" id="goals-button">
<button type="button" class="btn btn-primary form-control mt-2" data-toggle="modal" data-target="#goal-popup" id="goals-button">
Ziele <span class="badge badge-light text-primary">@Model.SelectedGoals.Count</span>
</button>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="collapse w-100 mt-1 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
<div class="collapse w-100 mt-2 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
</div>
</div>
}

View File

@@ -805,7 +805,7 @@
@{
var validationMessage = TempData[MobileUtils.TempDataServiceRecordValidationKey] as ValidationResult;
var formId = TempData[MobileUtils.TempDataFormIdKey];
// ToDo: Bei Klick auf Abbrechen den EditModus zurücksetzen
if(validationMessage != null)
{
<div class="modal modal-open" data-backdrop="static" tabindex="-1" role="dialog" id="service-record-validation-message-modal">
@@ -821,7 +821,7 @@
@Html.Raw(validationMessage.Message)
</div>
<div class="modal-footer">
@if(validationMessage.KannTrotzdemGespeichertWerden)
@if (validationMessage.KannTrotzdemGespeichertWerden)
{
<button type="button" class="btn btn-primary" data-dismiss="modal" onclick="showSpinner(); $('#@formId').submit();">OK</button>
}
@@ -830,7 +830,24 @@
<button type="button" class="btn btn-primary" data-dismiss="modal" onclick="loadServiceRecords()">OK</button>
}
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="loadServiceRecords()">Schließen</button>
@if (Model.IsInEditingMode)
{
using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Schließen</button>
}
}
else if (TempData[TempDataConstants.IsInTransferModeKey] is bool isInTransferMode && isInTransferMode)
{
using(Html.BeginForm("ResetTransferMode", "Main", FormMethod.Post))
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Schließen</button>
}
}
else
{
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="loadServiceRecords()">Schließen</button>
}
</div>
</div>
</div>

View File

@@ -80,7 +80,7 @@
@* Marker *@
@if(Model.ShowMarker)
{
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" class="custom-control-input" name="marker-cb" id="mb-marker-cb" />
@@ -93,9 +93,9 @@
@* ----- Betrag ----- *@
@if(Model.ShowBetrag)
{
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group my-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
@@ -112,18 +112,14 @@
</div>
}
@* Trennlinie *@
<div class="form-row">
<div class="col-md">
<hr />
</div>
</div>
@* Trennstrich *@
<hr class="py-0 mt-2 mb-0" />
@* Start- und Enddatum *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="mb-start-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="mb-start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Startdatum
@@ -142,8 +138,8 @@
@if(Model.IsEndDateVisible)
{
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="mb-end-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="mb-end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Enddatum
@@ -189,8 +185,8 @@
}
}
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="mb-start-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="mb-start-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text">
Von
@@ -206,8 +202,8 @@
</div>
</div>
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="mb-end-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="mb-end-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text">
Bis
@@ -227,8 +223,8 @@
@* Dauer und Stunden/Minuten-Auswahl *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="form-group my-0">
<div class="input-group mt-2">
<div class="input-group-prepend">
@{
var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer";
@@ -260,8 +256,8 @@
{
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="form-group my-0">
<div class="input-group mt-2">
<div class="input-group-prepend">
<div class="input-group-text">
Gefahrene Kilometer
@@ -279,17 +275,17 @@
{
<div class="form-row" id="textmodule-container">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="mb-textbausteine-button">Textbausteine</button>
<button type="button" class="btn btn-primary form-control mt-2" data-toggle="modal" data-target="#textbausteine-popup" id="mb-textbausteine-button">Textbausteine</button>
</div>
</div>
}
@* Dokumentationsfelder *@
<div class="form-row">
<div class="col-md mt-3">
<div class="col-md">
@if(Model.NumberOfDokuTypes == 0)
{
<div class="form-group">
<div class="form-group mt-2">
<label for="mb-dokufeld">Dokumentation</label>
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="mb-dokufeld">@notice0</textarea>
</div>
@@ -323,9 +319,9 @@
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="d-flex bd-highlight mt-2">
<div class="mr-auto bd-highlight">
<!-- dient nur als Abstandshalter-->
@* Abstandshalter *@
</div>
<div class="ml-3 bd-highlight">
@using(Html.BeginForm("ResetMultiBookingForm", "Main", FormMethod.Post))

View File

@@ -14,107 +14,93 @@
<script type="text/javascript">
$(document).ready(function () {
try {
$("#mb-hours-minutes-dropdown-btn").on("click",
function() {
$("#mb-hours-minutes-dropdown-btn").data("text", $("#mb-hours-minutes-dropdown-btn").text().replaceAll(/\s/g, ""));
});
$("#mb-hours-minutes-dropdown-btn").on("click",
function() {
$("#mb-hours-minutes-dropdown-btn").data("text", $("#mb-hours-minutes-dropdown-btn").text().replaceAll(/\s/g, ""));
});
$(".hours-minutes-link").on("click",
function() {
var previousText = $("#mb-hours-minutes-dropdown-btn").data("text");
var currentText = $(this).text().replaceAll(/\s/g, "");
$(".hours-minutes-link").on("click",
function() {
const previousText = $("#mb-hours-minutes-dropdown-btn").data("text");
const currentText = $(this).text().replaceAll(/\s/g, "");
if(previousText === currentText) {
return;
}
if(previousText === currentText) {
return;
}
var buttonText = $(this).text();
$("#mb-hours-minutes-dropdown-btn").text(buttonText);
const buttonText = $(this).text();
$("#mb-hours-minutes-dropdown-btn").text(buttonText);
setInputFilter('mb-duration', 'mb-distance', 'mb-hours-minutes-dropdown-btn');
window.setInputFilter('mb-duration', 'mb-distance', 'mb-hours-minutes-dropdown-btn');
$.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" });
$.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" });
calculateDuration(true, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, false);
});
} catch(error) {
showErrorPopup(error);
}
calculateDuration(true, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, false);
});
});
function addEmployeeToMultiBooking() {
try {
var selectedEmployees = [];
var selectedEmployees = [];
var oidString = "";
let oidString = "";
$("#multi-booking-employee-selection-popup input:checked").each(function() {
var oid = $(this).val();
$("#multi-booking-employee-selection-popup input:checked").each(function() {
selectedEmployees.push($(this).val());
});
selectedEmployees.push(oid);
});
for(let i = 0; i < selectedEmployees.length; i++) {
oidString += selectedEmployees[i];
for(var i = 0; i < selectedEmployees.length; i++) {
oidString += selectedEmployees[i];
if(i < selectedEmployees.length - 1) {
oidString += ",";
}
}
if(i < selectedEmployees.length - 1) {
oidString += ",";
}
}
$.get("@Url.Action("AddEmployeesToMultiBooking")", { pEmployeeOids: oidString }).done(function(numberOfSelectedEmployees) {
$("#multi-booking-selected-employees-count-badge").text(numberOfSelectedEmployees);
$.get("@Url.Action("AddEmployeesToMultiBooking")", { pEmployeeOids: oidString }).done(function(numberOfSelectedEmployees) {
$("#multi-booking-selected-employees-count-badge").text(numberOfSelectedEmployees);
$("#multi-booking-create-button").prop("disabled", numberOfSelectedEmployees === "0" ? true : false);
});
} catch (error) {
showErrorPopup(error);
}
$("#multi-booking-create-button").prop("disabled", numberOfSelectedEmployees === "0" ? true : false);
});
}
function submitMultiBookingForm() {
try {
showSpinner();
showSpinner();
$.get("@Url.Action("MultiBookingHasSelectedSupportConcepts")").done(function (result1) {
if(false === checkJson(result1)) {
logWarning("submitMultiBookingForm: Der zurückgegebene Wert ist kein gültiges JSON!");
hideSpinner();
return;
}
$.get("@Url.Action("MultiBookingHasSelectedSupportConcepts")").done(function (result1) {
if(false === checkJson(result1)) {
logWarning("submitMultiBookingForm: Der zurückgegebene Wert ist kein gültiges JSON!");
hideSpinner();
return;
}
$.get("@Url.Action("MultiBookingHasSelectedEmployees")").done(function (result2) {
if(false === checkJson(result2)) {
logWarning("submitMultiBookingForm: Der zurückgegebene Wert ist kein gültiges JSON!");
hideSpinner();
return;
}
$.get("@Url.Action("MultiBookingHasSelectedEmployees")").done(function (result2) {
if(false === checkJson(result2)) {
logWarning("submitMultiBookingForm: Der zurückgegebene Wert ist kein gültiges JSON!");
hideSpinner();
return;
}
var hasSupportConcepts = parseJason(result1);
var hasEmployees = parseJason(result2);
const hasSupportConcepts = parseJason(result1);
const hasEmployees = parseJason(result2);
if (hasSupportConcepts && hasEmployees) {
validateForm($("#multiBookingForm"), "mb-");
} else {
hideSpinner();
var message = "";
if (hasSupportConcepts && hasEmployees) {
validateForm($("#multiBookingForm"), "mb-");
} else {
hideSpinner();
let message = "";
if (!hasSupportConcepts && !hasEmployees) {
message = "Bitte wählen Sie mindestens einen Hilfeplan und Mitarbeiter aus.";
} else if(hasSupportConcepts && !hasEmployees) {
message = "Bitte wählen Sie mindestens einen Mitarbeiter aus.";
} else {
message = "Bitte wählen Sie mindestens einen Hilfeplan aus.";
}
if (!hasSupportConcepts && !hasEmployees) {
message = "Bitte wählen Sie mindestens einen Hilfeplan und Mitarbeiter aus.";
} else if(hasSupportConcepts && !hasEmployees) {
message = "Bitte wählen Sie mindestens einen Mitarbeiter aus.";
} else {
message = "Bitte wählen Sie mindestens einen Hilfeplan aus.";
}
showAlertMessageBoxWithoutCallback("Speichern nicht möglich", message);
}
});
});
} catch (error) {
showErrorPopup(error);
}
showAlertMessageBoxWithoutCallback("Speichern nicht möglich", message);
}
});
});
}
</script>
@@ -127,32 +113,32 @@
</div>
</div>
<!-- (Mehrfachbuchung) Hilfeplan- und Gruppenauswahl Popup -->
@* (Mehrfachbuchung) Hilfeplan- und Gruppenauswahl Popup *@
<div class="modal" data-backdrop="static" tabindex="-1" role="dialog" id="multi-booking-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#multi-booking-supportconcepts" data-toggle="tab" role="tab">Hilfepläne</a>
<a class="nav-item nav-link" href="#multi-booking-groups" data-toggle="tab" role="tab">Gruppen</a>
</nav>
<div class="tab-content" id="multi-booking-sc-cb-rel-tab-content">
@Html.Partial("MultiBookingScCbRelList", Model)
</div>
</div>
</div>
</div>
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#multi-booking-supportconcepts" data-toggle="tab" role="tab">Hilfepläne</a>
<a class="nav-item nav-link" href="#multi-booking-groups" data-toggle="tab" role="tab">Gruppen</a>
</nav>
<div class="tab-content" id="multi-booking-sc-cb-rel-tab-content">
@Html.Partial("MultiBookingScCbRelList", Model)
</div>
</div>
</div>
</div>
</div>
<!-- (Mehrfachbuchung) Mitarbeiterauswahl Popup -->
@* (Mehrfachbuchung) Mitarbeiterauswahl Popup *@
<div class="modal" tabindex="-1" role="dialog" id="multi-booking-employee-selection-popup">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Mitarbeiter hinzufügen</h5>

View File

@@ -15,46 +15,49 @@
@* (Mehrfachbuchung) Hilfeplanauswahl-Button *@
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-task-red btn-block" data-toggle="modal" data-target="#multi-booking-popup" id="support-concepts-and-groups-button">Hilfepläne und Gruppen hinzufügen</button>
<button type="button" class="btn btn-bewo-task-red btn-block" data-toggle="modal" data-target="#multi-booking-popup" id="support-concepts-and-groups-button">Hilfepläne und Gruppen hinzufügen</button>
</div>
</div>
@* (Mehrfachbuchung) Ausgewählte Hilfepläne *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="mb-selected-cb2sc-list">
@foreach(var selectedCb2ScRelation in Model.MultiBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item bg-bewo-task-red" id="mb-relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span>
@selectedCb2ScRelation.Text1
<br />
<span class="@selectedCb2ScRelation.TextColor small">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="window.removeSupportConceptCostBearerRel(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
</div>
<div class="form-group my-0">
@if(Model.MultiBookingSelectionObject.SelectedRelations.Any())
{
<div class="list-group mt-2" id="mb-selected-cb2sc-list">
@foreach(var selectedCb2ScRelation in Model.MultiBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item bg-bewo-task-red" id="mb-relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span class="text-light">
@selectedCb2ScRelation.Text1
<br/>
<span class="@selectedCb2ScRelation.TextColor small">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="window.removeSupportConceptCostBearerRel(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
}
</div>
</div>
</div>
@* (Mehrfachbuchung) Mitarbeiterauswahl-Button *@
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<button type="button" class="btn btn-bewo-employee btn-block" data-toggle="modal" data-target="#multi-booking-employee-selection-popup" id="multi-booking-employees-button">
<div class="form-group my-0">
<button type="button" class="btn btn-bewo-employee btn-block mt-2" data-toggle="modal" data-target="#multi-booking-employee-selection-popup" id="multi-booking-employees-button">
Mitarbeiter hinzufügen <span class="badge badge-light text-primary" id="multi-booking-selected-employees-count-badge">@Model.MultiBookingSelectedEmployees.Count</span>
</button>
</div>

View File

@@ -251,7 +251,7 @@
<div class="card w-100 @cardBackground">
<div class="card-header" onclick="cardHeaderClick2(this)">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@serviceRecord.ServiceRecordOid"></i>
<i class="fas @Html.GetCollapsibleChevron(Model, $"collapse-service-record-{serviceRecord.ServiceRecordOid}") h-100 text-primary" id="chevron-@serviceRecord.ServiceRecordOid"></i>
</div>
<div class="d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
@@ -260,9 +260,9 @@
</div>
</div>
<div class="collapse @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, $"collapse-service-record-{serviceRecord.ServiceRecordOid}")" id="collapse-service-record-@serviceRecord.ServiceRecordOid">
<div class="card-body">
<div class="container">
<div class="row mb-3">
<div class="card-body p-1">
<div class="container p-0">
<div class="row m-1 mb-2">
@if(Model.HasRightToEditServiceRecord(serviceRecord))
{
using(Html.BeginForm("SelectRecordToEdit", "Main", FormMethod.Post, new { id = "select-record-to-edit-form-" + serviceRecord.ServiceRecordOid.Value }))
@@ -329,7 +329,7 @@
</div>
</div>
<table class="table table-sm table-striped service-record-table">
<table class="table table-sm table-striped service-record-table m-1">
@* Dauer *@
<tr>
<td class="text-secondary">

View File

@@ -128,23 +128,21 @@
if(["0", "1", "2", "3", "4"].includes(selectedOption)) {
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
window.loadServiceRecords();
}
else if(selectedOption === "5") {
$("#last-x-interval-container").show();
$("#custom-interval-container, #month-interval-container").hide();
hideSpinner();
}
else if(selectedOption === "6") {
$("#custom-interval-container").show();
$("#last-x-interval-container, #month-interval-container").hide();
hideSpinner();
}
else if(selectedOption === "7") {
$("#month-interval-container").show();
$("#last-x-interval-container, #custom-interval-container").hide();
hideSpinner();
}
window.loadServiceRecords();
}
</script>
@@ -153,15 +151,15 @@
<div class="row">
@* ----- Einzelbuchungsformular ----- *@
<div class="col col-12 col-md-5">
@if(Model != null)
@if (Model != null)
{
using(Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { Id = "selectSupportConceptForm", onreset = "resetSingleBookingForm()" }))
using (Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { Id = "selectSupportConceptForm", onreset = "resetSingleBookingForm()" }))
{
var selectedSuportConceptTimeSpanColorClass = Model.SelectedCostBearer2SupportConceptRelListObject.IsAboutToExpire
? "text-bewo-is-about-to-expire"
: Model.SelectedCostBearer2SupportConceptRelListObject.ExpiresInThreeMonthsOrLess
? "text-bewo-expires-in-three-months"
: "text-light";
var selectedSuportConceptTimeSpanColorClass = Model.SelectedCostBearer2SupportConceptRelListObject.IsAboutToExpire
? "text-bewo-is-about-to-expire"
: Model.SelectedCostBearer2SupportConceptRelListObject.ExpiresInThreeMonthsOrLess
? "text-bewo-expires-in-three-months"
: "text-light";
<div>
<div class="container p-0">
@@ -169,16 +167,20 @@
<div class="col mt-3">
<div class="list-group">
<a href="#" class="list-group-item flex-column align-items-start no-underline bg-bewo-task-red" data-toggle="modal" data-target="#supportConceptList">
<div class="d-flex">
<h5 class="mb-1 text-light text-left" id="selectedSupportConceptCustomerInfo">@Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth</h5>
</div>
<div class="d-flex">
<h5 class="mb-1 text-light text-left" id="selectedSupportConceptCustomerInfo">@Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth</h5>
</div>
@if(Model.SelectedCostBearerSupportConceptRelOid > 0)
{
<div class="dropdown-divider my-0 py-0"></div>
}
<p class="mb-1 text-left @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
@Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan
</p>
</a>
</div>
</div>
@if(Model.CostBearer2SupportConceptOid != null && Model.CostBearer2SupportConceptOid > 0)
@if (Model.CostBearer2SupportConceptOid != null && Model.CostBearer2SupportConceptOid > 0)
{
<div class="col-md-auto mt-3">
<button type="button" class="btn btn-outline-primary w-100 h-100" id="statistics-button" data-toggle="modal" data-target="#statistics-popup" onclick="showPieChart()">
@@ -190,7 +192,7 @@
</div>
</div>
</div>
<!-- Hilfeplanauswahlpopup modal-dialog-centered-->
@* Hilfeplanauswahlpopup *@
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog text-center modal-dialog-scrollable" role="document">
<div class="modal-content">
@@ -201,7 +203,7 @@
</button>
</div>
<div class="modal-body">
<!-- Hilfeplansuche -->
@* Hilfeplansuche *@
<div class="input-group mb-3">
<input class="form-control w-100" autocomplete="on" type="text" placeholder="Suchen..." oninput="supportConceptSearchOnChange()" id="support-concept-search-input" />
<div class="input-group-append">
@@ -212,10 +214,9 @@
</div>
<hr />
<!-- Hilfeplanliste -->
@* Hilfeplanliste *@
<div class="list-group">
@foreach(var supportConceptListObject in Model.SupportConceptListObjects)
@foreach (var supportConceptListObject in Model.SupportConceptListObjects)
{
var timeSpanColorClass = supportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : supportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
@@ -235,14 +236,14 @@
</div>
</div>
</div>
<!-- /Hilfeplanauswahlpopup -->
@* /Hilfeplanauswahlpopup *@
<input type="text" class="d-none" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedCostBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid">
<input type="hidden" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedCostBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid">
}
if(Model.IsCustomerAbsence)
{
<div class="container mt-3 mx-auto p-0 w-100 text-center">
<div class="container my-1 mb-0 mx-auto p-0 w-100 text-center bg-bewo-dev">
<span>
<i class="fas fa-exclamation-triangle text-warning"></i>
<div class="text-danger d-inline">Klient ist abwesend</div>
@@ -257,26 +258,26 @@
@* ----- Einzelbuchung: Mitarbeiter ----- *@
<div class="form-row">
<div class="col-md">
<div class="mt-3" id="single-booking-employee-container">
<div class="mt-2" id="single-booking-employee-container">
@Html.PopupWithSearchForIFilterables(Model.Employees, "setSelectedEmployeeForSingleBooking", null, Model.SelectedEmployee?.DetailDescription, "single-booking-employee-modal-popup", false)
</div>
</div>
</div>
@* ----- Einzelbuchung: Ziele ----- *@
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
{
<!-- Einzelbuchung: Ziele -->
<div class="form-row mb-0">
<div class="col-md">
<button type="button" class="btn btn-primary form-control my-3" data-toggle="modal" data-target="#goal-popup" id="goals-button">
<div class="form-row">
<div class="col-md mt-2">
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#goal-popup" id="goals-button">
Ziele <span class="badge badge-light text-primary">@Model.SelectedGoals.Count</span>
</button>
</div>
</div>
<div class="form-row mb-0">
<div class="form-row">
<div class="col-md">
<div class="collapse w-100 mt-1 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
<div class="collapse mt-2 w-100 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
</div>
</div>
}
@@ -293,14 +294,14 @@
<div class="form-row">
<div class="col-md">
<div class="custom-control custom-checkbox custom-control-inline">
<div class="mt-1 custom-control custom-checkbox custom-control-inline">
<input type="checkbox" class="custom-control-input" name="@FormCollectionConstants.MarkerKey" id="marker-cb" @markerCheckedValue />
<label class="custom-control-label" for="marker-cb">Marker</label>
</div>
</div>
</div>
}
@* ----- Betrag ----- *@
@if(Model.ShowBetrag)
{
@@ -310,9 +311,9 @@
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
}
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group my-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
@@ -328,20 +329,14 @@
</div>
</div>
}
<div class="form-row">
<div class="col-md">
<hr />
</div>
</div>
<hr class="mt-2 mb-0" />
@* ----- Einzelbuchung: Startdatum und gegebenenfalls Enddatum ----- *@
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="start-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Startdatum
@@ -358,11 +353,11 @@
</div>
@* ----- Einzelbuchung: Enddatum ----- *@
@if(Model.IsEndDateVisible)
@if (Model.IsEndDateVisible)
{
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="end-date-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Enddatum
@@ -390,20 +385,20 @@
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
if (Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
{
startTimeValue = Model.NewStartTime;
endTimeValue = Model.NewEndTime;
durationValue = Model.NewDuration?.ToString();
if(Model.NewDuration.HasValue)
if (Model.NewDuration.HasValue)
{
durationValue = (Model.NewDuration / divisor).ToString();
}
}
}
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="start-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="start-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text px-2">
Von
@@ -421,8 +416,8 @@
@* ----- Einzelbuchung: Bis ----- *@
<div class="col-md">
<div class="form-group my-2">
<div class="input-group date" id="end-time-picker" data-target-input="nearest">
<div class="form-group my-0">
<div class="input-group date mt-2" id="end-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text sm-prepend-input-group-text px-2">
Bis
@@ -440,9 +435,9 @@
</div>
@* ----- Einzelbuchung: Dauer ----- *@
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group my-0">
<div class="input-group">
<div class="input-group-prepend">
@{
@@ -453,7 +448,7 @@
</div>
</div>
<input type="number" step="0.01" min="0" class="form-control" id="duration" name="Dauer" onchange="onDurationChange('start-time', 'end-time', 'start-date', 'end-date', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker')" value="@durationValue">
@if(Model.IsZeiterfassungInStdMin)
@if (Model.IsZeiterfassungInStdMin)
{
<div class="input-group-append">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
@@ -473,9 +468,9 @@
@* ----- Einzelbuchung: Distanz ----- *@
@if(Model.ShowDistanceField)
{
<div class="form-row">
<div class="form-row mt-2">
<div class="col-md">
<div class="form-group my-2">
<div class="form-group my-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
@@ -497,10 +492,9 @@
$('#tree').load('@Url.Action("LoadUpToDateTextModules")');
}
</script>
<!-- Einzelbuchung: Textbausteine -->
<div class="form-row" id="textmodule-container">
<div class="form-row mt-2" id="textmodule-container">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button" onclick="textModuleButtonOnClick()">Textbausteine</button>
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button" onclick="textModuleButtonOnClick()">Textbausteine</button>
</div>
</div>
}
@@ -508,9 +502,9 @@
@* ----- Einzelbuchung: Dokumentation ----- *@
<div class="form-row">
<div class="col-md mt-3">
@if(Model.NumberOfDokuTypes == 0)
@if (Model.NumberOfDokuTypes == 0)
{
<div class="form-group">
<div class="form-group my-0">
<label for="dokufeld">Dokumentation</label>
<textarea class="form-control" autocomplete="on" style="overflow: scroll;" name="Dokumentation6" id="dokufeld">@Model.NoticeToEdit</textarea>
</div>
@@ -518,7 +512,7 @@
else
{
<ul class="nav nav-tabs" role="tab-list">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
@for (var i = 0; i < Model.Dokutypes.Length; i++)
{
var currentDokuType = Model.Dokutypes[i];
@@ -530,7 +524,7 @@
}
</ul>
<div class="tab-content" id="dokufelderTab">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
@for (var i = 0; i < Model.Dokutypes.Length; i++)
{
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
@@ -546,9 +540,8 @@
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<div class="mr-auto bd-highlight"></div>
</div>
@if(Model.IsInEditingMode)
{
using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
@@ -656,7 +649,7 @@
<div class="input-group-prepend">
<span class="input-group-text">Von</span>
</div>
<input type="text" id="time-frame-start-date" name="von" class="form-control datetimepicker-input" data-target="#time-frame-start-date-picker" value="@defaultStartDate" />
<input type="text" id="time-frame-start-date" name="von" onfocusout="loadServiceRecords()" class="form-control datetimepicker-input" data-target="#time-frame-start-date-picker" value="@defaultStartDate" />
<div class="input-group-append" data-target="#time-frame-start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
@@ -669,7 +662,7 @@
<div class="input-group-prepend">
<span class="input-group-text">Bis</span>
</div>
<input type="text" id="time-frame-end-date" name="bis" class="form-control datetimepicker-input" data-target="#time-frame-end-date-picker" value="@defaultEndDate" />
<input type="text" id="time-frame-end-date" name="bis" onfocusout="loadServiceRecords()" class="form-control datetimepicker-input" data-target="#time-frame-end-date-picker" value="@defaultEndDate" />
<div class="input-group-append" data-target="#time-frame-end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
@@ -688,7 +681,7 @@
<div class="input-group-prepend">
<span class="input-group-text">Monat</span>
</div>
<select name="month-select" class="custom-select" id="month-select">
<select name="month-select" class="custom-select" id="month-select" onchange="loadServiceRecords()">
<option value="1"
@{if(Model.LastSelectedServiceRecordMonth.Month == 1) { @Html.Raw("selected") } }>
Januar
@@ -747,7 +740,7 @@
<div class="input-group-prepend">
<span class="input-group-text">Jahr</span>
</div>
<select class="custom-select" name="year-select" id="year-select">
<select class="custom-select" name="year-select" id="year-select" onchange="loadServiceRecords()">
@{
var heuer = DateTime.Today.Year;
for(var year = heuer + 1; year >= heuer - 10; year--)
@@ -766,14 +759,14 @@
</div>
}
<hr class="mt-0"/>
<hr class="mt-2"/>
<div class="container-fluid mt-3" id="service-record-list-container">
@Html.Partial("ServiceRecordListPartial", Model)
</div>
}
</div>
@*----- /Liste mit den Einträgen und dem Auswahl-Select ----- *@
@* ----- /Liste mit den Einträgen und dem Auswahl-Select ----- *@
</div>
@using(Html.BeginForm("DeleteSignature", "Main", FormMethod.Post, new { id = "delete-signature-form" }))

View File

@@ -4227,14 +4227,19 @@ WHERE sc.Billable = 1 and sr.StartDate >= '{0:yyyy-MM-dd}' and sr.StartDate < '{
return criteria.List<ConfirmationReceiptSignature>().Any();
}
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime serviceRecordStart, DateTime serviceRecordEnd, out List<ConfirmationReceiptSignature> monatsunterschriften)
// Mit confirmationreceiptsignature2servicerecord suchen: Klient UND Mitarbeiter
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime serviceRecordStart, DateTime serviceRecordEnd, long costBearer2SupportConceptOid, out List<ConfirmationReceiptSignature> monatsunterschriften)
{
var timePartOfQuery = " STR_TO_DATE(CONCAT(SUBSTRING(TimeSpanString, 18, 4), '-', SUBSTRING(TimeSpanString, 4, 2), '-', SUBSTRING(TimeSpanString, 1, 2)), '%Y-%m-%d') AND STR_TO_DATE(CONCAT(SUBSTRING(TimeSpanString, 18, 4), '-', SUBSTRING(TimeSpanString, 15, 2), '-', SUBSTRING(TimeSpanString, 12, 2)), '%Y-%m-%d') ";
var timePartOfQuery = " STR_TO_DATE(CONCAT(SUBSTRING(monatsunterschrift.TimeSpanString, 18, 4), '-', SUBSTRING(monatsunterschrift.TimeSpanString, 4, 2), '-', SUBSTRING(monatsunterschrift.TimeSpanString, 1, 2)), '%Y-%m-%d') AND STR_TO_DATE(CONCAT(SUBSTRING(monatsunterschrift.TimeSpanString, 18, 4), '-', SUBSTRING(monatsunterschrift.TimeSpanString, 15, 2), '-', SUBSTRING(monatsunterschrift.TimeSpanString, 12, 2)), '%Y-%m-%d') ";
var sql =
"SELECT * FROM confirmationreceiptsignature " +
"SELECT monatsunterschrift.* FROM confirmationreceiptsignature monatsunterschrift " +
$"WHERE ('{serviceRecordStart:yyyy-MM-dd HH:mm:ss}' BETWEEN {timePartOfQuery} OR '{serviceRecordEnd:yyyy-MM-dd HH:mm:ss}' BETWEEN {timePartOfQuery}) " +
$"AND (CustomerOid = {customerOid} OR EmployeeOid = {employeeOid})";
$"AND (monatsunterschrift.CustomerOid = {customerOid} OR monatsunterschrift.EmployeeOid = {employeeOid}) " +
"AND monatsunterschrift.Oid IN " +
"(SELECT monatsunterschrift2sr.ConfirmationReceiptSignatureOid FROM confirmationreceiptsignature2servicerecord monatsunterschrift2sr " +
"WHERE monatsunterschrift2sr.ServiceRecordOid IN " +
$"(SELECT sr.Oid FROM servicerecord sr WHERE sr.CostBearer2SupportConceptOid = {costBearer2SupportConceptOid}))";
var query = Session.CreateSQLQuery(sql);

View File

@@ -65,7 +65,7 @@ namespace BeWo.Service.Plugins
//t = "2542550178"; // LWVEingliederungshilfe
//t = "3963982016"; // Convoi
//t = "1600408120"; // BeWo Amrath
t = "3886054624"; // Brücke ABW
//t = "3886054624"; // Brücke ABW
//t = "2028095630"; // Integra Heinsberg
//t = "5351926758"; // Viva a Vida
//t = "2215396183"; // Diakonie Remscheid Lennep
@@ -110,7 +110,7 @@ namespace BeWo.Service.Plugins
//t = "8677523325"; // BeWo Richartz
//t = "1765854593"; // Mein Betreutes Wohnen
//t = "6802909544"; // Lebenshilfe Coburg
t = "9417634361"; // Synprax
//t = "9417634361"; // Synprax
//t = "5761861730"; // Lebenshilfe Warendorf
//t = "6712648331"; // BeWo Färber
//t = "4982295287"; // ASB Hamm

View File

@@ -44,10 +44,10 @@ namespace BeWo.Service.Plugins
var klientenoid = groupRecord.SupportConcept?.Customer?.CustomerOid;
var mitarbeiteroid = groupRecord.Employee?.EmployeeOid;
if(klientenoid is object && mitarbeiteroid is object)
{
var hasMonatsunterschrift = DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(klientenoid.Value, mitarbeiteroid.Value, startDate, endDate, out var existingSignatures);
var hasMonatsunterschrift = DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(klientenoid.Value, mitarbeiteroid.Value, startDate, endDate, groupRecord.CostBearer2SupportConceptOid.Value, out var existingSignatures);
if(hasMonatsunterschrift)
{
@@ -246,19 +246,38 @@ namespace BeWo.Service.Plugins
});
}
/*
* Meldung anzeigen bei:
* 1. Neuem ServiceRecord
* 2. Ändern der Zeitangaben eines bestehenden ServiceRecord
*/
if(newServiceRecord.ServiceDescription.Category.IsBillable)
{
var startDate = newServiceRecord.Start.Value;
var endDate = newServiceRecord.End.Value;
var areTimesEqual = true;
var isNew = newServiceRecord.ServiceRecordOid is null;
if(newServiceRecord.ServiceRecordOid.HasValue)
{
var originalServiceRecord = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(newServiceRecord.ServiceRecordOid.Value);
var isStartUnchanged = Equals(originalServiceRecord.Start, newServiceRecord.Start);
var isEndUnchanged = Equals(originalServiceRecord.End, newServiceRecord.End);
areTimesEqual = isStartUnchanged && isEndUnchanged;
}
var klientenoid = newServiceRecord.SupportConcept?.Customer?.CustomerOid;
var mitarbeiteroid = newServiceRecord.Employee?.EmployeeOid;
if(klientenoid is object && mitarbeiteroid is object)
{
var hasMonatsunterschrift = DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(klientenoid.Value, mitarbeiteroid.Value, startDate, endDate, out var existingSignatures);
var hasMonatsunterschrift = DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(klientenoid.Value, mitarbeiteroid.Value, startDate, endDate, newServiceRecord.CostBearer2SupportConceptOid.Value, out var existingSignatures);
if(hasMonatsunterschrift)
if(hasMonatsunterschrift && (isNew || false == areTimesEqual))
{
var customerName = newServiceRecord.SupportConcept.CustomerName;
@@ -1068,7 +1087,7 @@ namespace BeWo.Service.Plugins
Customer c = overlappingRecord.Customer;
if (c != null)
{
{
rdc.Message += String.Format(" bei Klient/in {0}, {1}", c.Person.LastName, c.Person.FirstName);
}
Employee e = overlappingRecord.Employee;

View File

@@ -1406,6 +1406,6 @@ namespace BeWo.Service.ServiceContracts
[FaultContract(typeof(BeWoFault))]
[OperationContract]
bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime start, DateTime end);
bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime start, DateTime end, long costBearer2SupportConceptOid, out List<ConfirmationReceiptSignatureDC> confirmationReceiptSignatures);
}
}

View File

@@ -2736,9 +2736,13 @@ namespace BeWo.Service.ServiceImplementations
return validator.ValidateServiceRecord(newServiceRecord, statistics, maxDaysEditServiceRecordsAllowed, employeeOids, cb2scOids);
}
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime start, DateTime end)
public bool HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(long customerOid, long employeeOid, DateTime start, DateTime end, long costBearer2SupportConceptOid, out List<ConfirmationReceiptSignatureDC> confirmationReceiptSignatures)
{
return DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(customerOid, employeeOid, start, end, out var list);
var result = DAOFactory.SearchDAO.HasConfirmationReceiptSignatureByDateAndEmployeeAndCustomer(customerOid, employeeOid, start, end, costBearer2SupportConceptOid, out var list);
confirmationReceiptSignatures = MapperFactory.ConfirmationReceiptSignatureDC_ConfirmationReceiptSignature.MapToNewDCs(list);
return result;
}
public List<ServiceRecordValidationResultDC> ValidateServiceRecordDeletion(ServiceRecordDC serviceRecord, long employeeOid)

View File

@@ -48,8 +48,8 @@ namespace BS.Shared.DataContracts
EndDate.Equals(validationResult.EndDate) &&
ApprovedHours.Equals(validationResult.ApprovedHours) &&
HoursNew.Equals(validationResult.HoursNew) &&
EmployeeName.Equals(validationResult.EmployeeName) &&
CustomerName.Equals(validationResult.CustomerName) &&
(EmployeeName?.Equals(validationResult.EmployeeName) ?? false) &&
(CustomerName?.Equals(validationResult.CustomerName) ?? false) &&
Allow.Equals(validationResult.Allow);
return areEqual;