427 lines
19 KiB
Plaintext
427 lines
19 KiB
Plaintext
@using BeWoPlanerMobil.Util
|
|
@model BeWoPlanerMobil.Models.ReportModel
|
|
|
|
@{
|
|
ViewBag.Title = "Quittierungsbeleg";
|
|
}
|
|
|
|
<style type="text/css">
|
|
.btn-group {
|
|
width: 135px;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
function getChangeDateSelectionUrl() {
|
|
return "@Url.Action("ChangeDateSelection")";
|
|
}
|
|
|
|
function getChangeFiltersUrl() {
|
|
return "@Url.Action("ChangeFilters")";
|
|
}
|
|
|
|
function getSetQbFilterEnumUrl() {
|
|
return "@Url.Action("SetQbFilterEnum")";
|
|
}
|
|
|
|
function getSetCustomerUrl() {
|
|
return "@Url.Action("SetCustomer")";
|
|
}
|
|
|
|
function getValidateCustomerSignatureUrl() {
|
|
// TODO: implementieren? Ja!
|
|
}
|
|
|
|
function getCreateSignatureForServiceOverviewUrl() {
|
|
return "@Url.Action("CreateSignatureForServiceOverview")";
|
|
}
|
|
|
|
$(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() {
|
|
calcReportFormPrependWidth();
|
|
});
|
|
|
|
function getLoadConfirmationReceiptSignaturesUrl() {
|
|
return "@Url.Action("LoadConfirmationReceiptSignatures")";
|
|
}
|
|
|
|
function createServiceOverview() {
|
|
try {
|
|
showSpinner();
|
|
|
|
$("#report-signatures-container").load("@Url.Action("LoadServiceOverview")",
|
|
function () {
|
|
hideSpinner();
|
|
}
|
|
);
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
var reportFormWidth = 0;
|
|
function calcReportFormPrependWidth() {
|
|
try {
|
|
if(reportFormWidth === 0) {
|
|
reportFormWidth = getMaxWidth("sm-report-prepend-input-group-text");
|
|
}
|
|
|
|
var newWidth = reportFormWidth;
|
|
|
|
if($(document).width() <= 768) {
|
|
newWidth = getMaxWidth("sm-report-prepend-input-group-text");
|
|
}
|
|
|
|
$(".sm-report-prepend-input-group-text").width(newWidth);
|
|
} catch (error) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(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) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<div class="container-fluid my-3" id="report-form-container">
|
|
<div class="row">
|
|
<div class="col col-12">
|
|
<div class="mt-3">
|
|
<div class="form-row">
|
|
<div class="col-md">
|
|
<div class="form-group mb-1">
|
|
@Html.DropDownListFor(m => m.SelectedFilterItemId, Model.QbFilterItems, new { id = "qb-filter-select", @class = "custom-select", onchange = "qbFilterSelectionChange()" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3">
|
|
<div class="form-row">
|
|
<div class="col-md">
|
|
<div class="form-group mb-1 d-none" id="customer-selection-container">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text">
|
|
Klient
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedCustomerOid, Model.CustomerListItems, new { id = "customers-drop-down", @class = "custom-select", onchange = "onCustomerSelectionChange()" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3">
|
|
<div class="form-row">
|
|
<div class="col-xl">
|
|
<div class="form-group mb-1 d-none" id="team-selection-container">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text">
|
|
Team
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedTeamOid, Model.Teams, new { id = "teams-drop-down", @class = "custom-select", onchange = "checkForExistingSignature()" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3">
|
|
<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">
|
|
@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 = "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">
|
|
@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 = "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">
|
|
@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 = "setReportServiceCategory()" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3">
|
|
<div class="form-row">
|
|
<div class="col-lg-5">
|
|
<div class="form-group mb-1">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text sm-report-prepend-input-group-text">
|
|
Monat
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedMonth, Model.Months, new { id = "month-select", onchange = "onMonthOrYearChange()", @class = "custom-select" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-2">
|
|
<div class="form-group mb-1">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text sm-report-prepend-input-group-text">
|
|
Vom
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedStartDay, Model.Days, new { id = "start-day-select", onchange = "checkForExistingSignature()", @class = "custom-select" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-2">
|
|
<div class="form-group mb-1">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text sm-report-prepend-input-group-text">
|
|
Bis
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedEndDay, Model.Days, new { id = "end-day-select", onchange = "checkForExistingSignature()", @class = "custom-select" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<div class="form-group mb-1">
|
|
<div class="input-group">
|
|
<div class="input-group-prepend">
|
|
<div class="input-group-text sm-report-prepend-input-group-text">
|
|
Jahr
|
|
</div>
|
|
</div>
|
|
@Html.DropDownListFor(m => m.SelectedYear, Model.Years, new { id = "year-select", onchange = "onMonthOrYearChange()", @class = "custom-select" })
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clearfix mt-3">
|
|
@if(Html.IsInDebugMode())
|
|
{
|
|
<button type="button" class="btn btn-bewo-dev float-left" data-toggle="modal" data-target="#qb-info-popup">
|
|
<span class="fas fa-info"></span>
|
|
</button>
|
|
}
|
|
|
|
<button type="button" class="btn btn-primary float-right" id="create-button" onclick="createServiceOverview()">Erstellen</button>
|
|
</div>
|
|
</div>
|
|
<div class="col col-12" id="report-signatures-container">
|
|
@Html.Partial("QuittierungsbelegsResultPartial", Model)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Container für die Mitarbeiterunterschrift -->
|
|
<div class="container-fluid d-none my-3" id="report-signature-container">
|
|
|
|
</div>
|
|
<!-- /Container für die Mitarbeiterunterschrift -->
|
|
<!-- Container für die Unterschrift -->
|
|
<div class="container-fluid d-none my-3" id="report-signature-container-div">
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col">
|
|
<h4 class="d-inline" id="report-info-column-h4">Unterschrift</h4>
|
|
<button type="button" class="btn btn-primary float-right" id="cancel-report-signature-button">
|
|
<span class="fas fa-times-circle"></span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div id="signature-container-div" class="mt-4">
|
|
|
|
</div>
|
|
<div class="row mt-3 signingContent">
|
|
<div class="col">
|
|
<div class="alert alert-primary d-none" role="alert" id="overwriting-signature-alert">
|
|
Achtung, Sie sind dabei eine vorhandene Unterschrift zu ersetzen!
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mt-3 signingContent" id="report-canvas-row-div">
|
|
<div class="canvas-container" id="canvas-container-div">
|
|
<canvas id="report-sketch-pad-canvas" width="500" height="200" style="border: 1px solid #343A40;" class="bg-white rounded"></canvas>
|
|
</div>
|
|
</div>
|
|
<div class="row signingContent">
|
|
<div class="col-12">
|
|
<button type="button" class="btn btn-primary float-right" id="save-report-signature-button">Speichern</button>
|
|
<button type="button" class="btn btn-secondary float-right mr-3" id="clear-report-canvas-button">Neu</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /Container für die Unterschrift -->
|
|
|
|
<!-- Popup der Legende -->
|
|
<div class="modal" tabindex="-1" role="dialog" id="qb-info-popup">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title text-danger">Legende</h5>
|
|
<button class="close" type="button" data-dismiss="modal" aria-label="close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" style="background-color: #F7F7F7 !important">
|
|
<button type="button" class="btn btn-bewo-customers d-inline">
|
|
<span class="fas fa-signature"></span>
|
|
<span class="fas fa-check" style="color: yellow !important"></span>
|
|
K
|
|
</button>
|
|
/
|
|
<button type="button" class="btn btn-bewo-employee d-inline">
|
|
<span class="fas fa-signature"></span>
|
|
<span class="fas fa-check" style="color: yellow !important"></span>
|
|
M
|
|
</button>
|
|
- Nicht alle Zeiterfassungseinträge haben eine Monatsunterschrift; Die Unterschrift wird nicht auf dem Quittierungsbeleg angezeigt.
|
|
<br />
|
|
<br />
|
|
|
|
<button type="button" class="btn btn-bewo-customers d-inline">
|
|
<span class="fas fa-signature"></span>
|
|
<span class="fas fa-check-double" style="color: greenyellow !important"></span>
|
|
K
|
|
</button>
|
|
/
|
|
<button type="button" class="btn btn-bewo-employee d-inline">
|
|
<span class="fas fa-signature"></span>
|
|
<span class="fas fa-check-double" style="color: greenyellow !important"></span>
|
|
M
|
|
</button>
|
|
- Alle Zeiterfassungseinträge haben eine Monatsunterschrift; Die Unterschrift wird auf dem Quittierungsbeleg angezeigt.
|
|
<br />
|
|
<br />
|
|
|
|
<p><span class="fas fa-check text-bewo-customers"></span> - Dieser Zeiterfassungseintrag hat vom Klienten eine Monatsunterschrift.</p>
|
|
<p><span class="fas fa-check text-bewo-employee"></span> - Dieser Zeiterfassungseintrag hat vom Mitarbeiter eine Monatsunterschrift.</p>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="clearfix">
|
|
<button class="btn btn-primary float-right" type="button" data-dismiss="modal">Schließen</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /Popup der Legende --> |