Anonymisierung überarbeitet
Gelöschte Termine einer Terminserie werden bei der Ressourcenprüfung nicht mehr beachtet

MoK:
noch nicht fertig: Quittierungsbelegsmodul verbessert (Eingaben bleiben beim Neuladen erhalten, Löschbuttons + Rechte dafür folgen)
This commit is contained in:
2023-01-18 13:43:11 +01:00
parent 25200b6ec8
commit 1dc127db4e
12 changed files with 355 additions and 107 deletions

View File

@@ -40,7 +40,7 @@ namespace BeWo.Scheduler.View
public string TimeEditMask => CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern;
public RecurrenceVisualController RecurrenceVisualController { get; }
protected internal bool IsNewAppointment => Controller == null || Controller.IsNewAppointment;
protected internal bool IsNewAppointment => Controller is null || Controller.IsNewAppointment;
protected bool ShouldShowRecurrence => !Appointment.IsOccurrence && Controller.ShouldShowRecurrenceButton;

View File

@@ -1547,7 +1547,7 @@ namespace BeWo.Scheduler.View
var darfTerminDetailsSehen = true;
var appointment = e.Appointment;
if(appointment.GetCustomFieldStorage() == null)
if(appointment.GetCustomFieldStorage() is null)
{
e.Allow = false;
return;

View File

@@ -232,6 +232,7 @@
<Compile Include="Util\MobileUtils.cs" />
<Compile Include="Util\ReferenceNumberWithNotice.cs" />
<Compile Include="Util\ReportUtils\ConfirmationReceiptObject.cs" />
<Compile Include="Util\ReportUtils\ReportTimeFrame.cs" />
<Compile Include="Util\ServiceRecord2Validation.cs" />
<Compile Include="Util\SignatureUtils.cs" />
<Compile Include="Util\SupportConceptStatisticsData.cs" />

View File

@@ -76,15 +76,14 @@ namespace BeWoPlanerMobil.Controllers
}
var month = DateTime.Today.Month;
var year = DateTime.Today.Year;
var year = DateTime.Today.Year;
var first = new DateTime(year, month, 1).AddMonths(-1);
var last = first.AddMonths(1).AddDays(-1);
var last = first.AddMonths(1).AddDays(-1);
Model.SelectedYear = first.Year;
Model.SelectedMonth = first.Month;
Model.SelectedStartDay = first.Day;
Model.SelectedEndDay = last.Day;
Model.SelectedYear = Model.SelectedYear ?? first.Year;
Model.SelectedMonth = Model.SelectedMonth ?? first.Month;
Model.SelectedStartDay = Model.SelectedStartDay ?? first.Day;
Model.SelectedEndDay = Model.SelectedEndDay ?? last.Day;
var filterEnums = Enum.GetValues(typeof(QBFilterEnum)).Cast<QBFilterEnum>();
@@ -158,14 +157,11 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedTeam = null;
}
var startDay = Model.SelectedStartDay;
var endDay = Model.SelectedEndDay;
// Datumsangaben laden in separater Methode
var reportTimeFrame = GetReportTimeFrame();
var reportObjects = new List<ServicesOverviewRO>();
var month = Model.SelectedMonth;
var year = Model.SelectedYear;
var organisationOid = Model.SelectedOrganisationOid ?? 0;
var employeeOid = Model.SelectedEmployeeOid ?? 0;
var serviceCategoryOid = Model.SelectedServiceCategoryOid;
@@ -175,25 +171,25 @@ namespace BeWoPlanerMobil.Controllers
switch(Model.SelectedFilterItem.FilterEnum)
{
case QBFilterEnum.AlleKlienten:
reportObjects = ServicesOverviewRO.Create(month, year, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid);
reportObjects = ServicesOverviewRO.Create(reportTimeFrame.Month, reportTimeFrame.Year, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid);
break;
case QBFilterEnum.NurKlientenMeinesTeams:
var teamRelatedCustomerOids = GetTeamCustomerOids();
reportObjects.AddRange(teamRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(teamRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
case QBFilterEnum.MeineKlienten:
var myRelatedCustomerOids = DefaultReportCreator.GetMeineKlientenOids();
reportObjects.AddRange(myRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(myRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
case QBFilterEnum.KlientenAuswahl:
reportObjects = new List<ServicesOverviewRO> { ServicesOverviewRO.Create(customerOid, month, year, false, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)};
reportObjects = new List<ServicesOverviewRO> { ServicesOverviewRO.Create(customerOid, reportTimeFrame.Month, reportTimeFrame.Year, false, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)};
break;
case QBFilterEnum.TeamAuswahl:
var customerOids = GetTeamCustomerOids(teamOid);
reportObjects.AddRange(customerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(customerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
default:
reportObjects = ServicesOverviewRO.Create(month, year, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid, true, false);
reportObjects = ServicesOverviewRO.Create(reportTimeFrame.Month, reportTimeFrame.Year, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid, true, false);
break;
}
@@ -444,9 +440,10 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public string ChangeDateSelection(string startDayString, string endDayString, string monthString, string yearString)
{
if(Model == null)
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
var isParsingSuccessful1 = int.TryParse(startDayString, out var startDay);
@@ -469,7 +466,7 @@ namespace BeWoPlanerMobil.Controllers
}
[Authorize]
public string ChangeFilters(string employeeOidStr, string organisationOidStr, string categoryOidStr)
public string ChangeFilters(string organisationOidStr, string categoryOidStr)
{
if(Model is null)
{
@@ -477,22 +474,18 @@ namespace BeWoPlanerMobil.Controllers
return _LeerzeichenFuerGetMethoden;
}
var isParsingSuccessful1 = long.TryParse(employeeOidStr, out var employeeOid);
var isParsingSuccessful2 = long.TryParse(organisationOidStr, out var organisationOid);
var isParsingSuccessful3 = long.TryParse(categoryOidStr, out var categoryOid);
Model.SelectedEmployee = isParsingSuccessful1 ? EmployeeService.LoadCompactEmployee(employeeOid) : null;
Model.SelectedOrganisation = isParsingSuccessful2 ? CustomerService.LoadOrganisationCompact(organisationOid) : null;
Model.SelectedOrganisation = isParsingSuccessful2 ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null;
Model.SelectedServiceCategory = isParsingSuccessful3 ? OperationsService.LoadServiceCategory(categoryOid) : null;
return _LeerzeichenFuerGetMethoden;
}
// ToDo: Mittels CheckBoxFor realisieren, um den Wert zu erhalten.
[Authorize]
public string ChangeIsForSelectedEmployeesOnly(bool isForSelectedEmployeesOnly)
public string ChangeIsForSelectedEmployeesOnly(bool? isForSelectedEmployeeOnly, long? employeeOid)
{
if(Model is null)
{
@@ -500,7 +493,86 @@ namespace BeWoPlanerMobil.Controllers
return _LeerzeichenFuerGetMethoden;
}
Model.IsForSelectedEmployeesOnly = isForSelectedEmployeesOnly;
Model.IsForSelectedEmployeesOnly = isForSelectedEmployeeOnly ?? false;
Model.SelectedEmployee = employeeOid.HasValue ? Model.Employees.FirstOrDefault(employee => employee.EmployeeOid.Equals(employeeOid.Value)) : null;
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
public string SetEmployeeOid(long? employeeOid)
{
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
Model.SelectedEmployee = employeeOid.HasValue ? Model.Employees.FirstOrDefault(employee => employee.EmployeeOid.Equals(employeeOid)) : null;
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
public string ChangeIsForSelectedOrganisationOnly(bool? isForSelectedOrganisationOnly, long? organisationOid)
{
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
Model.IsForSelectedCostbearersOnly = isForSelectedOrganisationOnly ?? false;
Model.SelectedOrganisation = organisationOid.HasValue ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null;
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
public string SetOrganisationOid(long? organisationOid)
{
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
Model.SelectedOrganisation = organisationOid.HasValue ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null;
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
public string ChangeIsForSelectedServiceCategoryOnly(bool? isForSelectedServiceCategoryOnly, long? serviceCategoryOid)
{
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
Model.IsForSelectedCategoryOnly = isForSelectedServiceCategoryOnly ?? false;
if(serviceCategoryOid.HasValue)
{
Model.SelectedServiceCategory = Model.ServiceCategories.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid == serviceCategoryOid);
}
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
public string SetServiceCategoryOid(long? serviceCategoryOid)
{
if(Model is null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
if(serviceCategoryOid.HasValue)
{
Model.SelectedServiceCategory = Model.ServiceCategories.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid == serviceCategoryOid);
}
return _LeerzeichenFuerGetMethoden;
}
@@ -713,14 +785,10 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedTeam = null;
}
var startDay = Model.SelectedStartDay;
var endDay = Model.SelectedEndDay;
var reportTimeFrame = GetReportTimeFrame();
var reportObjects = new List<ServicesOverviewRO>();
var month = Model.SelectedMonth;
var year = Model.SelectedYear;
var organisationOid = Model.SelectedOrganisationOid ?? 0;
var employeeOid = Model.SelectedEmployeeOid ?? 0;
var serviceCategoryOid = Model.SelectedServiceCategoryOid;
@@ -730,25 +798,25 @@ namespace BeWoPlanerMobil.Controllers
switch(Model.SelectedFilterItem.FilterEnum)
{
case QBFilterEnum.AlleKlienten:
reportObjects = ServicesOverviewRO.Create(month, year, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid);
reportObjects = ServicesOverviewRO.Create(reportTimeFrame.Month, reportTimeFrame.Year, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid);
break;
case QBFilterEnum.NurKlientenMeinesTeams:
var teamRelatedCustomerOids = GetTeamCustomerOids();
reportObjects.AddRange(teamRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(teamRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
case QBFilterEnum.MeineKlienten:
var myRelatedCustomerOids = DefaultReportCreator.GetMeineKlientenOids();
reportObjects.AddRange(myRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(myRelatedCustomerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
case QBFilterEnum.KlientenAuswahl:
reportObjects = new List<ServicesOverviewRO> { ServicesOverviewRO.Create(customerOid, month, year, false, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid) };
reportObjects = new List<ServicesOverviewRO> { ServicesOverviewRO.Create(customerOid, reportTimeFrame.Month, reportTimeFrame.Year, false, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid) };
break;
case QBFilterEnum.TeamAuswahl:
var customerOids = GetTeamCustomerOids(teamOid);
reportObjects.AddRange(customerOids.Select(cOid => ServicesOverviewRO.Create(cOid, month, year, true, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid)));
reportObjects.AddRange(customerOids.Select(cOid => ServicesOverviewRO.Create(cOid, reportTimeFrame.Month, reportTimeFrame.Year, true, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid)));
break;
default:
reportObjects = ServicesOverviewRO.Create(month, year, organisationOid, employeeOid, startDay, endDay, serviceCategoryOid, true, false);
reportObjects = ServicesOverviewRO.Create(reportTimeFrame.Month, reportTimeFrame.Year, organisationOid, employeeOid, reportTimeFrame.StartDay, reportTimeFrame.EndDay, serviceCategoryOid, true, false);
break;
}
@@ -887,5 +955,44 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("QuittierungsbelegsResultPartial", Model);
}
private ReportTimeFrame GetReportTimeFrame()
{
var month = DateTime.Today.Month;
var year = DateTime.Today.Year;
var first = new DateTime(year, month, 1).AddMonths(-1);
var last = first.AddMonths(1).AddDays(-1);
return new ReportTimeFrame(Model.SelectedYear ?? year, Model.SelectedMonth ?? month, Model.SelectedStartDay ?? first.Day, Model.SelectedEndDay ?? last.Day);
}
[Authorize]
[HttpPost]
public ActionResult DeleteCustomerSignature()
{
if(Model is null)
{
return Logout();
}
// ToDo: Unterschriften laden und gegebenenfalls Parameter einbauen
return RedirectToActionPermanent("InitReports", Model);
}
[Authorize]
[HttpPost]
public ActionResult DeleteEmployeeSignature()
{
if(Model is null)
{
return Logout();
}
// ToDo: Unterschrift laden und gebenenfalls Parameter einbauen
return RedirectToActionPermanent("InitReports", Model);
}
}
}

View File

@@ -35,9 +35,11 @@ namespace BeWoPlanerMobil.Models
}
}
[Display(Name = "Monat")] public int SelectedMonth { get; set; } = 1;
[Display(Name = "Monat")]
public int? SelectedMonth { get; set; }
[Display(Name = "Jahr")] public int SelectedYear { get; set; } = 2021;
[Display(Name = "Jahr")]
public int? SelectedYear { get; set; }
public List<SelectListItem> Months
{
@@ -83,8 +85,8 @@ namespace BeWoPlanerMobil.Models
{
var result = new List<SelectListItem>();
var month = SelectedMonth;
var year = SelectedYear;
var month = SelectedMonth ?? DateTime.Today.Month;
var year = SelectedYear ?? DateTime.Today.Year;
var last = new DateTime(year, month, 1).AddMonths(1).AddDays(-1).Day;
@@ -93,7 +95,7 @@ namespace BeWoPlanerMobil.Models
result.Add(new SelectListItem
{
Value = i.ToString(),
Text = i.ToString()
Text = i.ToString()
});
}
@@ -102,10 +104,10 @@ namespace BeWoPlanerMobil.Models
}
[Display(Name = "Vom")]
public int SelectedStartDay { get; set; }
public int? SelectedStartDay { get; set; }
[Display(Name = "Bis")]
public int SelectedEndDay { get; set; }
public int? SelectedEndDay { get; set; }
public ConfirmationReceiptObject ConfirmationReceiptObject { get; set; }

View File

@@ -7,7 +7,7 @@ function logWarning(message) {
}
function logError(message) {
logColorfulMessage(message, "red");
console.error("%c" + message, "font-size: 16px; font-weight:bold; color: red");
}
function logDebug(message) {

View File

@@ -4,10 +4,8 @@
function initializeReportView() {
checkForExistingSignature();
calculateDays();
qbFilterSelectionChange();
filterCheckBoxChange();
}
function calculateDays() {
@@ -128,25 +126,6 @@ function qbFilterSelectionChange() {
$.get(selectedFilterEnumUrl, { filterEnumString: selectedOption});
}
function filterCheckBoxChange() {
var changeFiltersUrl = getChangeFiltersUrl();
var isEmployeeSelected = $("#selected-employee-cb").is(":checked");
var isOrganisationSelected = $("#selected-organisation-cb").is(":checked");
var isCategorySelected = $("#selected-category-cb").is(":checked");
var employeeOid = isEmployeeSelected ? $("#employee-select option:selected").val() : null;
var organisationOid = isOrganisationSelected ? $("#organisation-select option:selected").val() : null;
var categoryOid = isCategorySelected ? $("#category-select option:selected").val() : null;
$.get(changeFiltersUrl,
{
employeeOidStr: employeeOid,
organisationOidStr: organisationOid,
categoryOidStr: categoryOid
});
}
function onCustomerSelectionChange() {
var url = getSetCustomerUrl();

View File

@@ -49,7 +49,7 @@
//overwrite, signatureOidsString, canSign, cardBodyId, customerOid, numberOfEntries, customerName, timeSpan, isEmployeeSignature
var methodName = "showSignaturePad(" +
$"{result.HasCustomerSignature.ToString().ToLower()}, " +
$"{result.HasCustomerSignature.ToString().ToLower()}, " +
$"'{customerSignatureOidsString}', " +
$"{canCustomerSign.ToString().ToLower()}, " +
$"'#collapse-result-{result.Identifier}', " +
@@ -107,25 +107,66 @@
break;
}
}
<!--
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@result.Identifier"></i>
Alt:
<div class="input-group-prepend">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@result.Identifier"></i>
</div>
<p class="form-control text-primary border-0 bg-transparent" style="user-select: none !important;">
@result.CustomerName
</p>
<div class="input-group-append">
<button class="btn btn-bewo-customers rounded mr-1" type="button" onclick="@methodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@customerIcon" style="color: @customerBtnColor !important"></span>
K
</button>
<button class="btn btn-bewo-employee rounded" type="button" onclick="@employeeMethodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@employeeIcon" style="color: @employeeBtnColor !important"></span>
M
</button>
</div>
-->
@* Todo: Löschfunktionen implementieren *@
<div class="row">
<div class="col-sm-auto mr-auto">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@result.Identifier"></i>
</div>
<p class="form-control text-primary border-0 bg-transparent" style="user-select: none !important;">
@result.CustomerName
</p>
</div>
</div>
<p class="form-control text-primary border-0 bg-transparent" style="user-select: none !important;">
@result.CustomerName
</p>
<div class="input-group-append">
<button class="btn btn-bewo-customers rounded mr-1" type="button" onclick="@methodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@customerIcon" style="color: @customerBtnColor !important"></span>
K
</button>
<button class="btn btn-bewo-employee rounded" type="button" onclick="@employeeMethodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@employeeIcon" style="color: @employeeBtnColor !important"></span>
M
</button>
<div class="col-sm-auto">
<div class="btn-toolbar justify-content-between">
<div class="btn-group pr-1" role="group">
@*<button class="btn btn-danger" type="button" onclick="deleteCustomerSignatures('#collapse-result-@result.Identifier')">
<span class="fas fa-trash"></span>
</button>*@
<button class="btn btn-bewo-customers" type="button" onclick="@methodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@customerIcon" style="color: @customerBtnColor !important"></span>
K
</button>
</div>
<div class="btn-group" role="group">
@*<button class="btn btn-danger" type="button" onclick="deleteEmployeeSignature('#collapse-result-@result.Identifier')">
<span class="fas fa-trash"></span>
</button>*@
<button class="btn btn-bewo-employee" type="button" onclick="@employeeMethodName">
<span class="fas fa-signature"></span>
<span class="fas fa-@employeeIcon" style="color: @employeeBtnColor !important"></span>
M
</button>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,6 +1,4 @@
@using BeWoPlanerMobil.Util.ReportUtils
@using BS.Shared.Extensions
@model BeWoPlanerMobil.Models.ReportModel
@model BeWoPlanerMobil.Models.ReportModel
@{
ViewBag.Title = "Quittierungsbeleg";
@@ -34,6 +32,21 @@
$(document).ready(function() {
initializeReportView();
calcReportFormPrependWidth();
if($("#selected-employee-cb").is(":checked")) {
$("#employee-select-container").removeClass("d-none");
$("#employee-select-container").addClass("d-block");
}
if($("#selected-organisation-cb").is(":checked")) {
$("#organisation-select-container").removeClass("d-none");
$("#organisation-select-container").addClass("d-block");
}
if($("#selected-category-cb").is(":checked")) {
$("#test-div3").removeClass("d-none");
$("#test-div3").addClass("d-block");
}
});
$(window).resize(function() {
@@ -70,6 +83,107 @@
logError(error);
}
}
function setIsOnlyForSelectedEmployee() {
try {
var cb = $("#selected-employee-cb");
var isChecked = cb.is(":checked");
var employeeOid = isChecked ? parseFloat($("#employee-select option:selected").val()) : null;
$.get("@Url.Action("ChangeIsForSelectedEmployeesOnly")", { isForSelectedEmployeeOnly: isChecked, employeeOid: employeeOid});
} catch (error) {
logError(error);
}
}
function setIsOnlyForSelectedOrganisation() {
try {
var cb = $("#selected-organisation-cb");
var isChecked = cb.is(":checked");
var organisationOid = isChecked ? parseFloat($("#organisation-select option:selected").val()) : null;
$.get("@Url.Action("ChangeIsForSelectedOrganisationOnly")", { isForSelectedOrganisationOnly: isChecked, organisationOid: organisationOid});
} catch(error) {
logError(error);
}
}
function setIsOnlyForSelectedServiceCategory() {
try {
var cb = $("#selected-category-cb");
var isChecked = cb.is(":checked");
var serviceCategoryOid = isChecked ? parseFloat($("#category-select option:selected").val()) : null;
$.get("@Url.Action("ChangeIsForSelectedServiceCategoryOnly")", { isForSelectedServiceCategoryOnly: isChecked, serviceCategoryOid: serviceCategoryOid});
} catch(error) {
logError(error);
}
}
function setReportEmployee() {
try {
var employeeOid = parseFloat($("#employee-select option:selected").val());
if(employeeOid !== null && $.isNumeric(employeeOid)) {
$.get("@Url.Action("SetEmployeeOid")", { employeeOid: employeeOid });
} else {
logWarning("employeeOid '" + employeeOid + "' ist nicht numerisch!");
}
} catch(error) {
logError(error);
}
}
function setReportOrganisation() {
try {
var organisationOid = parseFloat($("#organisation-select option:selected").val());
if(organisationOid !== null && $.isNumeric(organisationOid)) {
$.get("@Url.Action("SetOrganisationOid")", { organisationOid: organisationOid });
} else {
logWarning("organisationOid '" + organisationOid + "' ist nicht numerisch!");
}
} catch(error) {
logError(error);
}
}
function setReportServiceCategory() {
try {
var serviceCategoryOid = parseFloat($("#category-select option:selected").val());
if(serviceCategoryOid !== null && $.isNumeric(serviceCategoryOid)) {
$.get("@Url.Action("SetServiceCategoryOid")", { serviceCategoryOid: serviceCategoryOid });
} else {
logWarning("serviceCategoryOid '" + serviceCategoryOid + "' ist nicht numerisch!");
}
} catch (error) {
logError(error);
}
}
function deleteCustomerSignatures(cardBodyId) {
try {
cardHeaderButtonClick(cardBodyId);
// ToDo: Nachfragen, ob die Unterschriften wirklich gelöscht werden sollen
showMessagePopupWithCallback("Unterschriften löschen", "", function() {
}, false);
} catch (error) {
logError(error);
}
}
function deleteEmployeeSignature(cardBodyId) {
try {
cardHeaderButtonClick(cardBodyId);
// ToDo: Nachfragen, ob die Unterschrift wirklich gelöscht werden soll
showMessagePopupWithCallback("Unterschrift löschen", "", function () {
}, false);
} catch(error) {
logError(error);
}
}
</script>
<div class="container-fluid my-3" id="report-form-container">
@@ -123,35 +237,38 @@
<div class="form-row">
<div class="col-xl">
<div class="form-group mb-1">
<!-- Nur für ausgewählten Mitarbeiter -->
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" onchange="filterCheckBoxChange()" class="custom-control-input" id="selected-employee-cb" data-toggle="collapse" data-target="#employee-select-container"/>
@Html.CheckBoxFor(m => m.IsForSelectedEmployeesOnly, new { onchange = "setIsOnlyForSelectedEmployee()", @class = "custom-control-input", id = "selected-employee-cb", data_toggle = "collapse", data_target = "#employee-select-container" })
<label class="custom-control-label" for="selected-employee-cb">Nur für ausgewählten Mitarbeiter</label>
</div>
</div>
<div class="form-group mb-1 collapse" id="employee-select-container">
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeItems, new { id = "employee-select", @class = "custom-select", onchange = "filterCheckBoxChange()" })
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeItems, new { id = "employee-select", @class = "custom-select", onchange = "setReportEmployee()" })
</div>
</div>
<div class="col-xl">
<div class="form-group mb-1">
<!-- Nur für ausgewählten Kostenträger -->
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" onchange="filterCheckBoxChange()" class="custom-control-input" id="selected-organisation-cb" data-toggle="collapse" data-target="#organisation-select-container"/>
@Html.CheckBoxFor(m => m.IsForSelectedCostbearersOnly, new { id = "selected-organisation-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedOrganisation()", data_toggle = "collapse", data_target = "#organisation-select-container" })
<label class="custom-control-label" for="selected-organisation-cb">Nur für ausgewählten Kostenträger</label>
</div>
</div>
<div class="form-group mb-1 collapse" id="organisation-select-container">
@Html.DropDownListFor(m => m.SelectedOrganisationOid, Model.OrganisationItems, new { id = "organisation-select", @class = "custom-select", onchange = "filterCheckBoxChange()" })
@Html.DropDownListFor(m => m.SelectedOrganisationOid, Model.OrganisationItems, new { id = "organisation-select", @class = "custom-select", onchange = "setReportOrganisation()" })
</div>
</div>
<div class="col-xl">
<div class="form-group mb-1">
<!-- Nur für ausgewählte Leistungskategorie -->
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" onchange="filterCheckBoxChange()" class="custom-control-input" id="selected-category-cb" data-toggle="collapse" data-target="#test-div3"/>
@Html.CheckBoxFor(m => m.IsForSelectedCategoryOnly, new { id = "selected-category-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedServiceCategory()", data_toggle = "collapse", data_target = "#test-div3" })
<label class="custom-control-label" for="selected-category-cb">Nur für ausgewählte Leistungskategorie</label>
</div>
</div>
<div class="form-group mb-1 collapse" id="test-div3">
@Html.DropDownListFor(m => m.SelectedServiceCategoryOid, Model.ServiceCategoryItems, new { id = "category-select", @class = "custom-select", onchange = "filterCheckBoxChange()" })
@Html.DropDownListFor(m => m.SelectedServiceCategoryOid, Model.ServiceCategoryItems, new { id = "category-select", @class = "custom-select", onchange = "setReportServiceCategory()" })
</div>
</div>
</div>

View File

@@ -38,7 +38,7 @@
<script src="~/Scripts/view-scripts/customer.js?v=1.11"></script>
<script src="~/Scripts/view-scripts/scheduler.js?v=1.11"></script>
<script src="~/Scripts/utils/dateUtils.js?v=1.11"></script>
<script src="~/Scripts/view-scripts/report.js?v=1.12"></script>
<script src="~/Scripts/view-scripts/report.js?v=1.13"></script>
<script src="~/Scripts/signature_pad-3.2.min.js?v=1.11"></script>
<script src="~/Scripts/utils/trimCanvas.js?v=1.11"></script>
<script src="~/Scripts/utils/resources-list-utils.js?v=1.11"></script>

View File

@@ -3616,11 +3616,11 @@ namespace BeWo.Data.Access
{
var c = CreateCriteria<Resource>("r").Add(Restrictions.Eq(nameof(BeWoEntityBase.IsActive), ActivationTypeId.Active)).Add(Restrictions.In(nameof(BeWoEntityBase.Oid), resourceOids));
var excludingSelectedAppointment = selectedAppointmentOid.HasValue ? $"oid <> {selectedAppointmentOid} AND " : "";
var excludingSelectedAppointment = selectedAppointmentOid.HasValue ? $"Oid <> {selectedAppointmentOid} AND " : "";
var sql = "Oid IN " +
"(SELECT resourceoid FROM resource2newschapp r2n WHERE r2n.newschappoid IN " +
$"(SELECT oid FROM newschedulerappointment WHERE IsActive = 1 AND {excludingSelectedAppointment}('{start:yyyy-MM-dd HH:mm:ss}' > startdate OR '{end:yyyy-MM-dd HH:mm:ss}' > startdate) AND ('{start:yyyy-MM-dd HH:mm:ss}' < enddate OR '{end:yyyy-MM-dd HH:mm:ss}' < enddate)))";
"(SELECT ResourceOid FROM resource2newschapp r2n WHERE r2n.NewSchAppOid IN " +
$"(SELECT Oid FROM newschedulerappointment WHERE IsActive = 1 AND Type <> 4 AND {excludingSelectedAppointment}('{start:yyyy-MM-dd HH:mm:ss}' > StartDate OR '{end:yyyy-MM-dd HH:mm:ss}' > StartDate) AND ('{start:yyyy-MM-dd HH:mm:ss}' < EndDate OR '{end:yyyy-MM-dd HH:mm:ss}' < EndDate)))";
var criterion = Expression.Sql(sql);
@@ -3683,7 +3683,7 @@ namespace BeWo.Data.Access
foreach(var occurrence in occurrenceAppointments)
{
if(recurringAppointment.EndDate == null || recurringAppointment.StartDate == null)
if(recurringAppointment.EndDate is null || recurringAppointment.StartDate is null)
{
continue;
}

View File

@@ -1358,6 +1358,7 @@ namespace BeWo.Service.ServiceImplementations
//visibleEmployees = new List<Employee> {user.Employee};
}
// ToDo: Nicht anonymisieren, wenn der Benutzer/Mitarbeiter das Recht hat, Termine anderer Mitarbeiter anzusehen
foreach(var appointment in appointments)
{
var isOriginator = appointment.Originator.EmployeeOid.Equals(user.Employee.Oid.Value);
@@ -1365,15 +1366,14 @@ namespace BeWo.Service.ServiceImplementations
var isInEmployeeList = appointment.EmployeeList.Any(e2a => e2a.Employee.EmployeeOid.Equals(user.Employee.Oid.Value));
// Betreff und Ort werden anonymisiert, wenn der angemeldete Benutzer nicht Ersteller ist und nicht in der Mitarbeiterliste ist und er den Ersteller nicht ansehen darf.
if(!isOriginator && !isInEmployeeList && !isAllowedToSeeOriginator)
if(!isOriginator && !isInEmployeeList && !hasRightToViewEmployeeAppointments)
{
appointment.Subject = anonymisiert;
appointment.Location = anonymisiert;
appointment.CanBeEdited = false;
}
if(!isOriginator && !visibleEmployees.Any(employee => employee.Oid.HasValue && employee.Oid.Value.Equals(appointment.Originator.EmployeeOid)))
if(!isOriginator && !hasRightToViewEmployeeAppointments)
{
appointment.Originator.FirstName = anonymisiert;
appointment.Originator.LastName = anonymisiert;
@@ -1383,7 +1383,7 @@ namespace BeWo.Service.ServiceImplementations
// Klienten anonymisieren
appointment.CustomerList.DoForEach(customer =>
{
if(!visibleCustomers.Any(c => c.Oid.HasValue && c.Oid.Equals(customer.CustomerOid)))
if(!hasRightToViewCustomerAppointments)
{
customer.FirstName = anonymisiert;
customer.LastName = anonymisiert;
@@ -1395,7 +1395,7 @@ namespace BeWo.Service.ServiceImplementations
// Mitarbeiter anonymisieren
appointment.EmployeeList.DoForEach(employee2Appointment =>
{
if(!visibleEmployees.Any(employee => employee.Oid.HasValue && employee.Oid.Value.Equals(employee2Appointment.Employee.EmployeeOid)))
if(!hasRightToViewEmployeeAppointments)
{
employee2Appointment.Employee.FirstName = anonymisiert;
employee2Appointment.Employee.LastName = anonymisiert;
@@ -1833,6 +1833,7 @@ namespace BeWo.Service.ServiceImplementations
}
}
// ToDo: Anonymisieren?
public List<SchedulerAppointmentDC> LoadTasksAndAppointmentsForEmployee(long pEmployeeOid, DateTime pInvertalStart, int pBufferSize, long? pEmployeeAppointmentsOid)
{
try