Intervallfinder überarbeitet & Bug gefixt, der zu einem Fehler beim Suchen nach freien Intervallen über mehrere Tage geführt hatte, wenn die Enduhrzeit vor der Startuhrzeit lag. Berichte mit Parametern. Verbesserte Mitarbeiter-, Klienten-, Team-, und Organisationsdropdowns mit Suche. Quittierungsbelegresultate (zum Unterschreiben) wird wie die Zeiterfassung paginiert. FaC: neuer Kalender noch nicht fertig.
280 lines
11 KiB
Plaintext
280 lines
11 KiB
Plaintext
@using BeWoPlanerMobil.Models
|
|
@using BeWoPlanerMobil.Util
|
|
@model BeWoPlanerMobil.Models.ReportViewerModel
|
|
|
|
@{
|
|
if(TempData[TempDataConstants.DoLogoutKey] is bool doLogout && doLogout)
|
|
{
|
|
<text>
|
|
<script type="text/javascript">
|
|
$("#second-logout-form").submit();
|
|
</script>
|
|
</text>
|
|
}
|
|
}
|
|
|
|
<script type="text/javascript">
|
|
function reportFilterOnChange() {
|
|
try {
|
|
window.toggleMitarbeiterstundenForm();
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function allEmployeesCbOnClick() {
|
|
try {
|
|
const isChecked = $("#msk-all-employees-cb").is(':checked');
|
|
|
|
$("#msk-employee-list").toggle(isChecked);
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function allTeamsCbOnClick() {
|
|
try {
|
|
const isChecked = $("#msk-all-teams-cb").is(':checked');
|
|
|
|
$("#msk-team-list").toggle(isChecked);
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function createMitarbeiterstundenkontoReport() {
|
|
try {
|
|
const month = parseInt($("#msk-month-select :selected").val());
|
|
const year = parseInt($("#msk-year-select :selected").val());
|
|
|
|
const allEmployees = $("#msk-all-employees-cb").is(':checked');
|
|
const allTeams = $("#msk-all-teams-cb").is(':checked');
|
|
|
|
let ansicht = 0;
|
|
|
|
if($("#msk-tagesansicht-cb").length) {
|
|
ansicht = $("#msk-tagesansicht-cb").is('checked') ? 1 : 0;
|
|
} else {
|
|
switch ($("input[name=msk-ansichtsradio]:checked").attr("id")) {
|
|
case "msk-tagesansichtsradio":
|
|
ansicht = 1;
|
|
break;
|
|
case "msk-jahresansichtsradio":
|
|
ansicht = 2;
|
|
break;
|
|
default:
|
|
ansicht = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
const teamForm = $("#msk-team-form");
|
|
const employeeForm = $("#msk-employee-form");
|
|
|
|
const isEmployeeFormSelected = employeeForm.css("display") === "block" || employeeForm.css("display") === "none" && (teamForm.css("display") === "none" || teamForm.length === 0);
|
|
|
|
const buttonTextLength = $("#msk-team-popup").parent().find(".dropdown-toggle").text().length;
|
|
|
|
if(false === isEmployeeFormSelected && buttonTextLength === 0) {
|
|
window.showAlertMessageBoxWithoutCallback("Mitarbeiterstundenkonto", "Bitte wählen Sie ein Team aus.");
|
|
|
|
return;
|
|
}
|
|
|
|
const all = allEmployees === true || allTeams === true;
|
|
|
|
showSpinner();
|
|
$("#msk-report-container").load("@Url.Action("LoadMitarbeiterstundenkonto")", {ansicht: ansicht, month: month, year: year, all: all, isEmployee: isEmployeeFormSelected }, function() {
|
|
hideSpinner();
|
|
$("#bewo-report-popup").modal("show");
|
|
});
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function loadCustomReport() {
|
|
try {
|
|
const selectedReportOid2HasParameters = $("#msk-customReportSelect").val();
|
|
|
|
if(selectedReportOid2HasParameters === undefined || selectedReportOid2HasParameters === null || selectedReportOid2HasParameters.includes("_") === false) {
|
|
return;
|
|
}
|
|
|
|
const oid2HasParams = selectedReportOid2HasParameters.split("_");
|
|
|
|
const hasParameters = oid2HasParams[1] === "1";
|
|
|
|
const selectedReportOid = oid2HasParams[0];
|
|
|
|
if(hasParameters) {
|
|
$("#berichte-form-container").load("@Url.Action("LoadBerichteForm")", {reportOid: selectedReportOid}, function() {
|
|
hideSpinner();
|
|
window.toggleMitarbeiterstundenForm();
|
|
$("#berichte-form-container").show();
|
|
});
|
|
} else {
|
|
showSpinner();
|
|
$("#berichte-form-container").empty();
|
|
$("#berichte-form-container").hide();
|
|
$("#msk-report-container").load("@Url.Action("LoadCustomReport")", {reportOid: selectedReportOid}, function () {
|
|
hideSpinner();
|
|
window.toggleMitarbeiterstundenForm();
|
|
$("#bewo-report-popup").modal("show");
|
|
});
|
|
}
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function setEmployee(element, oid) {
|
|
try {
|
|
$.get("@Url.Action("SetEmployeeForMitarbeiterstundenkonto")", {employeeOid: oid}).done(
|
|
function(employeeName) {
|
|
$("#msk-employee-popup").parent().find(".dropdown-toggle").text(employeeName);
|
|
$("#msk-employee-popup").modal("hide");
|
|
});
|
|
} catch(error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function setTeam(element, oid) {
|
|
try {
|
|
$.get("@Url.Action("SetTeamForMitarbeiterstundenkonto")", {teamOid: oid}).done(
|
|
function(teamName) {
|
|
$("#msk-team-popup").parent().find(".dropdown-toggle").text(teamName);
|
|
$("#msk-team-popup").modal("hide");
|
|
});
|
|
} catch (error) {
|
|
window.showErrorPopup(error);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
|
|
@if(Model.SelectedReportType == ReportType.Berichte)
|
|
{
|
|
@Html.DropDownListFor(model => model.SelectedCustomReport, Model.CustomReports, new { @class = "custom-select", id = "msk-customReportSelect", onchange = "loadCustomReport()" })
|
|
|
|
var berichteFormContainerDisplay = Model.SelectedCustomReport?.QueryOid != null ? "block" : "none";
|
|
|
|
<div id="berichte-form-container" style="display: @berichteFormContainerDisplay;">
|
|
@Html.Partial("BerichteFormPartialView", Model)
|
|
</div>
|
|
}
|
|
|
|
@if(Model.SelectedReportType == ReportType.Mitarbeiterstundenkonto && AbstractModel.HasRightToViewMitarbeiterstundenkonto)
|
|
{
|
|
<div id="report-form-container">
|
|
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll || AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
|
|
{
|
|
<div class="form-row">
|
|
<div class="col">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForEmployeesRadio" onchange="reportFilterOnChange()" checked />
|
|
<label for="msk-filterForEmployeesRadio">Nach Mitarbeiter filtern</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-row">
|
|
<div class="col">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForTeamsRadio" onchange="reportFilterOnChange()" />
|
|
<label for="msk-filterForTeamsRadio">Nach Teams filtern</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<div id="msk-employee-form">
|
|
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
|
|
{
|
|
<div class="form-row">
|
|
<div class="col">
|
|
<div class="form-group form-check">
|
|
<input type="checkbox" class="form-check-input" id="msk-all-employees-cb" />
|
|
<label class="form-check-label" for="msk-all-employees-cb" onclick="allEmployeesCbOnClick()">Alle Mitarbeiter</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="form-row" id="msk-employee-list">
|
|
<div class="col mb-3">
|
|
@Html.PopupWithSearchForIFilterables(Model.AllEmployees, "setEmployee", null, Model.SelectedEmployee?.DetailDescription, "msk-employee-popup", false)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll || AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
|
|
{
|
|
<div id="msk-team-form">
|
|
<div class="form-row">
|
|
<div class="col">
|
|
<div class="form-group form-check">
|
|
<input type="checkbox" class="form-check-input" id="msk-all-teams-cb" />
|
|
<label class="form-check-label" for="msk-all-teams-cb" onclick="allTeamsCbOnClick()">Alle Teams</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-row" id="msk-team-list">
|
|
<div class="col mb-3">
|
|
@Html.PopupWithSearchForIFilterables(Model.AllTeams, "setTeam", null, Model.SelectedTeam?.DetailDescription, "msk-team-popup", false)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<div class="form-row">
|
|
<div class="col">
|
|
@Html.DropDownListFor(model => model.SelectedMonth, Model.Months, new { @class = "custom-select mb-3", id = "msk-month-select" })
|
|
</div>
|
|
<div class="col">
|
|
@Html.DropDownListFor(model => model.SelectedYear, Model.Years, new { @class = "custom-select mb-3", id = "msk-year-select" })
|
|
</div>
|
|
</div>
|
|
<div class="form-row">
|
|
@{
|
|
var str = BS.Shared.Translation.Translator.Translate("StundenkontoTagesansicht");
|
|
}
|
|
|
|
@if(str == "StundenkontoTagesansicht")
|
|
{
|
|
<div class="col-4">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="msk-ansichtsradio" id="msk-tagesansichtsradio" />
|
|
<label for="msk-tagesansichtsradio">Tag</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-4">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="msk-ansichtsradio" id="msk-monatsansichtsradio" checked />
|
|
<label for="msk-monatsansichtsradio">Monat</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-4">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="msk-ansichtsradio" id="msk-jahresansichtsradio" />
|
|
<label for="msk-jahresansichtsradio">Jahr</label>
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="col">
|
|
<div class="form-group form-check">
|
|
<input type="checkbox" class="form-check-input" id="msk-tagesansicht-cb" />
|
|
<label class="form-check-label" for="msk-tagesansicht-cb">@str</label>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
<div class="form-row">
|
|
<div class="col">
|
|
<button type="button" class="btn btn-primary w-100" onclick="createMitarbeiterstundenkontoReport()">Erstellen</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|