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.
622 lines
28 KiB
Plaintext
622 lines
28 KiB
Plaintext
@using BeWoPlanerMobil.Controllers
|
|
@using BeWoPlanerMobil.Models
|
|
@using BeWoPlanerMobil.Service
|
|
@using BeWoPlanerMobil.Util
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
|
|
<meta content="utf-8" http-equiv="encoding">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" id="viewport" />
|
|
|
|
<title>@ViewBag.Title</title>
|
|
|
|
<script defer src="~/Content/fontawesome/all.min.js"></script>
|
|
|
|
@*
|
|
Einbindereihenfolge der Skripte für Bootstrap:
|
|
1. jQuery
|
|
2. Popper
|
|
3. Bootstrap
|
|
|
|
Oder
|
|
|
|
1. jQuery
|
|
2. Bootstrap-Bundle
|
|
*@
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/jquery/jquery-3.7.1.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/jquery/jquery.validate.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/jquery/jquery.unobtrusive-ajax.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/knockout-3.5.1.js")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bootstrap/bootstrap.bundle.min.js")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/cldr.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/event.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/supplemental.min.js")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/globalize.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/number.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/currency.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/date.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/message.min.js")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/ace/ace.min.js")"></script>
|
|
|
|
<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" />
|
|
<link rel="stylesheet" href="@Url.Content("~/Content/tempusdominus-bootstrap-4.min.css")" />
|
|
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dateUtils.js")" type="text/javascript"></script>
|
|
|
|
<script src="@Scripts.Url("~/Scripts/moment/moment.min.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/moment/locale/de.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/tempusdominus-boostrap-4.min.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/mobileUtils.js")" type="text/javascript"></script>
|
|
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/main.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/signature.js")" type="text/javascript"></script>
|
|
|
|
<link rel="stylesheet" href="@Url.Content("~/Scripts/bootstrap/bootstrap4-modal-fullscreen.min.css")" />
|
|
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/support-concept-statistics.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/customer.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/scheduler.js")" type="text/javascript"></script>
|
|
|
|
<script type="text/javascript" src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/report.js")"></script>
|
|
<script src="@Scripts.Url("~/Scripts/signature-pad.min.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/trimCanvas.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/resources-list-utils.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/list-utils.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js")" type="text/javascript"></script>
|
|
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js")" type="text/javascript"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bs-custom-file-input.min.js")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dropdown-search.js")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js")"></script>
|
|
|
|
<link rel="stylesheet" href="@Url.Content("~/Content/dx.common.css")" />
|
|
<link rel="stylesheet" href="@Url.Content("~/Content/dx.light.css")" />
|
|
|
|
@Html.DevExpress().GetStyleSheets(
|
|
ASPxWebClientUIControl.ColorSchemeLight,
|
|
new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout, Theme = "Default" },
|
|
new StyleSheet { ExtensionSuite = ExtensionSuite.Report },
|
|
new StyleSheet { ExtensionType = ExtensionType.WebDocumentViewer }
|
|
)
|
|
|
|
@Html.DevExpress().GetScripts(
|
|
new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
|
|
new Script { ExtensionSuite = ExtensionSuite.Icons },
|
|
new Script { ExtensionType = ExtensionType.WebDocumentViewer }
|
|
)
|
|
|
|
<script type="text/javascript">
|
|
window.addEventListener("error", (event) => {
|
|
hideSpinner();
|
|
|
|
if(event.message === "Uncaught TypeError: this._contentReadyAction is not a function") {
|
|
logInfo("contentReadyAction-Fehler ist aufgetregen. Kann ignoriert werden.");
|
|
return;
|
|
}
|
|
|
|
if(event.message.includes("E0024 - DevExtreme bundle already included.")) {
|
|
logInfo("Fehler E0024. Kann ignoriert werden. Ist ein webKit-Bug.");
|
|
return;
|
|
}
|
|
|
|
if(event.message === "SyntaxError: Can't create duplicate variable: 'MoKPasswordSecurity'") {
|
|
logInfo("SyntaxError: Can't create duplicate variable: 'MoKPasswordSecurity'. Kann ignoriert werden. Ist ein webKit-Bug.");
|
|
return;
|
|
}
|
|
|
|
configureErrorPopup(`Message: ${event.message}\r\nFile name: ${event.filename}\r\nLine: ${event.lineno}\r\nColumn: ${event.colno}\r\nStack: ${event.error.stack}`);
|
|
});
|
|
|
|
function showChangePasswordPopup() {
|
|
$("#password-changing-popup").modal("show");
|
|
calcChPwPrepend();
|
|
}
|
|
|
|
var initialPwPrependWidth = 0;
|
|
function calcChPwPrepend() {
|
|
try {
|
|
if(initialPwPrependWidth <= 0 && $.isNumeric(getMaxWidth("pw-prepend"))) {
|
|
initialPwPrependWidth = getMaxWidth("pw-prepend");
|
|
}
|
|
|
|
if(initialPwPrependWidth <= 0) {
|
|
return;
|
|
}
|
|
|
|
$(".pw-prepend").width(getMaxWidth("pw-prepend"));
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function copyErrorToClipboard() {
|
|
const element = document.querySelector("#fehlerdetail-textarea");
|
|
element.select();
|
|
element.setSelectionRange(0, 99999);
|
|
|
|
document.execCommand("copy");
|
|
}
|
|
|
|
function showErrorPopup(error, htmlMessage) {
|
|
hideSpinner();
|
|
|
|
configureErrorPopup(`name: ${error.name};\r\nmessage: ${error.message};\r\nstack: ${error.stack}`, htmlMessage);
|
|
}
|
|
|
|
function showErrorMessagePopup(text, htmlMessage) {
|
|
hideSpinner();
|
|
configureErrorPopup(text, htmlMessage);
|
|
}
|
|
|
|
function configureErrorPopup(textToShow, htmlMessage) {
|
|
try {
|
|
$("#fehlerdetail-textarea").text(textToShow);
|
|
$("#error-message-popup").modal("show");
|
|
|
|
if (htmlMessage !== undefined && htmlMessage !== null && (typeof htmlMessage === 'string' || htmlMessage instanceof String) && htmlMessage.length > 0) {
|
|
$("#html-error-container").html(htmlMessage);
|
|
} else {
|
|
$("#html-error-container").empty();
|
|
}
|
|
} catch (error) {
|
|
console.logError(error);
|
|
}
|
|
}
|
|
|
|
|
|
$(document).ready(function() {
|
|
try {
|
|
$("textarea").each(function () {
|
|
var id = this.getAttribute("id");
|
|
|
|
// Die textarea des Fehlerpopups soll scrollbar sein!
|
|
if (id === "fehlerdetail-textarea") {
|
|
return;
|
|
}
|
|
|
|
this.setAttribute("style", "height:"+(this.scrollHeight) + "px;overflow-y:scroll;");
|
|
}).on("input", function () {
|
|
this.style.height = 0;
|
|
this.style.height = (this.scrollHeight) + "px";
|
|
});
|
|
|
|
var timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
|
|
|
|
var timeOfLogin = "@AbstractModel.TimeOfLastAction";
|
|
|
|
if(timeOfLogin.length > 0) {
|
|
var countDownDate = new Date().getTime() + timeoutInMilliseconds;
|
|
|
|
var interval = setInterval(function() {
|
|
var now = new Date().getTime();
|
|
|
|
var distance = countDownDate - now;
|
|
|
|
if (distance <= 0) {
|
|
clearInterval(interval);
|
|
$("#countdown").html("00:00");
|
|
|
|
$("#logout-form").submit();
|
|
|
|
return;
|
|
}
|
|
|
|
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
|
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
|
|
|
var m = minutes.toString();
|
|
var s = seconds.toString();
|
|
|
|
if (minutes < 10) {
|
|
m = "0" + m;
|
|
}
|
|
|
|
if (seconds < 10) {
|
|
s = "0" + s;
|
|
}
|
|
|
|
$("#countdown").html(`Abmeldung in ${m}:${s}<span class="fas fa-unlock-alt pl-1"></span>`);
|
|
}, 1000);
|
|
}
|
|
|
|
calcPrependWidth();
|
|
|
|
@{
|
|
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
|
|
|
|
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
|
|
{
|
|
<text>
|
|
$("#error-alert-popup").modal("show");
|
|
</text>
|
|
}
|
|
}
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
});
|
|
|
|
$(window).resize(function() {
|
|
logSize();
|
|
calcPrependWidth();
|
|
});
|
|
|
|
previousWidth = "";
|
|
function logSize() {
|
|
var width = $(document).width();
|
|
|
|
var val = widthToBootstrapVal(width);
|
|
|
|
if(previousWidth !== val) {
|
|
console.log(`%c${val}`, "font-size: 16px; font-weight: bold; color: #00F2FF;");
|
|
}
|
|
|
|
window.previousWidth = val;
|
|
$("#dev-size-span").text(val);
|
|
}
|
|
|
|
function widthToBootstrapVal(width) {
|
|
try {
|
|
/*
|
|
Extra small <576px
|
|
Small ≥576px
|
|
Medium ≥768px
|
|
Large ≥992px
|
|
Extra large ≥1200px
|
|
*/
|
|
let result = "xs";
|
|
|
|
if(width < 567) {
|
|
result = "xs";
|
|
}
|
|
|
|
if(width >= 576) {
|
|
result = "sm";
|
|
}
|
|
|
|
if(width >= 768) {
|
|
result = "md";
|
|
}
|
|
|
|
if(width >= 992) {
|
|
result = "lg";
|
|
}
|
|
|
|
if(width >= 1200) {
|
|
result = "xl";
|
|
}
|
|
|
|
return result;
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function countdownClick() {
|
|
$("#countdown-tooltip").tooltip('show');
|
|
|
|
setTimeout(function() {
|
|
$("#countdown-tooltip").tooltip('hide');
|
|
}, 1500);
|
|
}
|
|
|
|
var initialVonWidth = 0;
|
|
function calcPrependWidth() {
|
|
try {
|
|
@* Prepend der Datetimepicker-Prepends, die kleiner sind als die anderen *@
|
|
if(initialVonWidth === 0 && $.isNumeric(getMaxWidth("sm-prepend-input-group-text"))) {
|
|
initialVonWidth = getMaxWidth("sm-prepend-input-group-text");
|
|
}
|
|
|
|
var smallPrependInputGroupTextWidth = getMaxWidth("sm-prepend-input-group-text");
|
|
var documentWidth = $(document).width();
|
|
|
|
var prependInputGroupTextWidth = getMaxWidth("prepend-input-group-text");
|
|
|
|
$(".prepend-input-group-text").width(prependInputGroupTextWidth);
|
|
|
|
if(documentWidth < 768 && $.isNumeric(smallPrependInputGroupTextWidth)) {
|
|
$(".sm-prepend-input-group-text").width(prependInputGroupTextWidth);
|
|
} else if($.isNumeric(smallPrependInputGroupTextWidth)) {
|
|
$(".sm-prepend-input-group-text").width(initialVonWidth);
|
|
}
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function getMaxWidth(elementClassName) {
|
|
try {
|
|
return Math.max.apply(Math, $(`.${elementClassName}`).map(function() { return $(this).width(); }).get());
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function getMaxElementHeight(elementClassName) {
|
|
try {
|
|
return Math.max.apply(Math, $(`.${elementClassName}`).map(function () { return $(this).height(); }).get());
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function toggleMultiBookingForm(shouldDisable) {
|
|
try {
|
|
$("#multi-booking-employees-button, #category-select, #leistung-select, #mb-start-date, #mb-end-date, #mb-start-time, #mb-end-time, #mb-duration, #mb-distance, textarea, #mb-reset-button, #mb-create-button, #mb-textbausteine-button, #mb-hours-minutes-dropdown-btn, #mb-marker-cb").prop("disabled", shouldDisable);
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
|
|
@if(MobileSessionFacade.IsUserLoggedIn())
|
|
{
|
|
using(Html.BeginForm("LogOutAfterSessionTimeout", "Main", FormMethod.Post, new { id = "logout-form", css = "display:none;" }))
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
@if(Model != null)
|
|
{
|
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top justify-content-end">
|
|
<div class="container-fluid">
|
|
<a href="#" class="navbar-brand">
|
|
@Model.LoggedInEmplyeeFirstNameLastName
|
|
@if(Html.IsInDebugMode())
|
|
{
|
|
<span class="navbar-text text-bewo-dev" id="dev-size-span"></span>
|
|
}
|
|
</a>
|
|
|
|
<span class="d-inline-block" data-toggle="tooltip" title="Zeit bis zur automatischen Abmeldung" id="countdown-tooltip">
|
|
<span class="navbar-text" style="font-size: small !important;" id="countdown" onclick="countdownClick()"></span>
|
|
</span>
|
|
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
|
|
<div class="collapse navbar-collapse" id="navbarResponsive">
|
|
<ul class="navbar-nav ml-auto">
|
|
@*
|
|
@if(Html.IsInDebugMode())
|
|
{
|
|
using(Html.BeginForm("RedirectToDevExpressScheduler", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-hand-middle-finger"></i>
|
|
Scheduler
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
*@
|
|
|
|
@if(AbstractModel.IsAllowedToSeeCustomers)
|
|
{
|
|
using(Html.BeginForm("RedirectToCustomer", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-user text-bewo-customers"></i>
|
|
Klienten
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
@using(Html.BeginForm("RedirectToMain", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-clock text-bewo-service-records"></i>
|
|
Zeiterfassung
|
|
</button>
|
|
</li>
|
|
}
|
|
|
|
@if(AbstractModel.IsAllowedToSeeScheduler)
|
|
{
|
|
using(Html.BeginForm("RedirectToScheduler", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-calendar-alt text-bewo-calendar"></i>
|
|
Kalender
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
|
|
@if(AbstractModel.HasRightToViewQuittierungsbelege)
|
|
{
|
|
using(Html.BeginForm("RedirectToReportView", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-chart-bar text-bewo-report">
|
|
|
|
</i>
|
|
Quittierungsbelege
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
@if(AbstractModel.HasRightToViewReports && AbstractModel.HasRightToViewMitarbeiterstundenkonto)
|
|
{
|
|
using(Html.BeginForm("RedirectToReportViewer", "Main", FormMethod.Post))
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-chart-bar text-bewo-report"></i>
|
|
Auswertungen
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showAboutPopup()">
|
|
<i class="fas fa-balance-scale text-primary"></i>
|
|
Über
|
|
</button>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showChangePasswordPopup()">
|
|
<i class="fas fa-lock text-danger"></i>
|
|
Passwort ändern
|
|
</button>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
@using(Html.BeginForm("Logout", "Main", FormMethod.Post, new { id = "normal-logout-form" }))
|
|
{
|
|
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
|
|
<i class="fas fa-sign-out-alt text-primary"></i>
|
|
Abmelden
|
|
</button>
|
|
}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
}
|
|
|
|
<div class="modal" role="dialog" tabindex="-1" id="mySpinner">
|
|
<div class="modal-dialog modal-dialog-centered text-center" role="document">
|
|
<div class="modal-content bg-transparent border-0">
|
|
<div class="d-flex justify-content-center">
|
|
<div class="spinner-border text-primary" role="status" style="width: 5rem; height: 5rem;">
|
|
<span class="sr-only"></span>
|
|
</div>
|
|
</div>
|
|
<p id="loading-info-p" class="text-white mt-4">Lade ...</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal" tabindex="-1" role="dialog" id="messagePopup">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title font-weight-bold" id="popupTitle"></h5>
|
|
<button class="close" type="button" data-dismiss="modal" aria-label="close" id="message-popup-esc-btn">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="modal-body">
|
|
<p id="popupMessage"></p>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn btn-primary" type="button" data-dismiss="modal" id="message-popup-ok-btn">OK</button>
|
|
<button class="btn btn-secondary" type="button" data-dismiss="modal" id="message-popup-close-btn">Schließen</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal" tabindex="-1" role="dialog" id="error-message-popup">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title text-danger font-weight-bold">Es ist ein Fehler aufgetreten</h5>
|
|
<button class="close" type="button" data-dismiss="modal" aria-label="close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>
|
|
Es ist leider ein unbekannter Fehler aufgetreten. Prüfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut. Wir sind stets bemüht, das Programm zu verbessern, daher freuen wir uns auch, wenn Sie die Fehlerdetails unten in einer Mail an <a href="mailto:support@bewoplaner.de" id="error-popup-mailto">support@bewoplaner.de</a> senden.
|
|
</p>
|
|
<hr />
|
|
<div class="form-group">
|
|
<label for="fehlerdetail-textarea">Fehlerdetails:</label>
|
|
<textarea class="form-control font-italic text-monospace" style="height: 20em !important; max-height: 20em !important; scroll-behavior: auto !important;" id="fehlerdetail-textarea"></textarea>
|
|
<div id="html-error-container"></div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="clearfix w-100">
|
|
<button class="btn btn-primary float-left" type="button" onclick="copyErrorToClipboard()">Text kopieren</button>
|
|
<button class="btn btn-primary float-right" type="button" data-dismiss="modal">OK</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal" tabindex="-1" role="dialog" id="error-alert-popup">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title font-weight-bold">Fehler</h5>
|
|
<button class="close" type="button" data-dismiss="modal" aria-label="close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="row">
|
|
<div class="col-auto">
|
|
<span class="fas fa-exclamation-triangle fa-3x text-danger"></span>
|
|
</div>
|
|
<div class="col" id="error-alert-message">
|
|
@Html.Raw(TempData[TempDataConstants.ErrorAlertPopupMessage])
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn btn-primary" type="button" data-dismiss="modal">OK</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if(TempData[TempDataConstants.ErrorMessageKey] != null)
|
|
{
|
|
<script type="text/javascript">
|
|
function clearErrorLog() {
|
|
try {
|
|
$("#error-message-alert").html("");
|
|
$("#error-alert-container").hide();
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
</script>
|
|
<div class="container-fluid mt-3" id="error-alert-container">
|
|
<div class="row d-flex justify-content-center">
|
|
<div class="col-md-3 col-lg-4">
|
|
<div class="alert alert-danger" id="error-message-alert" role="alert">
|
|
@TempData[TempDataConstants.ErrorMessageKey]
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
@using(Html.BeginForm("ZombieLogout", "Main", FormMethod.Post, new { id = "second-logout-form", style="display:none;" }))
|
|
{
|
|
|
|
}
|
|
|
|
@RenderBody()
|
|
</body>
|
|
</html>
|