Files
BeWoPlaner/BeWoPlanerMobil/Views/ReportViewer/BerichteFormPartialView.cshtml

682 lines
35 KiB
Plaintext

@using BeWoPlanerMobil.Util
@using BS.Shared
@using BS.Shared.DataContracts
@using BS.Shared.DataContracts.Compact
@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 () {
$("#query-date-picker").datetimepicker({
locale: "de",
format: "L"
});
$("#query-date-range-start-picker").datetimepicker({
locale: "de",
format: "L"
});
$("#query-date-range-end-picker").datetimepicker({
locale: "de",
format: "L"
});
});
$(document).ready(function() {
try {
window.calcPrependWidth();
} catch (error) {
window.showErrorPopup(error);
}
});
function selectCostBearer2SupportConceptRel(relOid, parameterType, parameterOid) {
try {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: relOid, parameterType: parameterType, parameterOid: parameterOid});
} catch (error) {
window.showErrorPopup(error);
}
}
function selectMonth(parameterType, parameterOid) {
try {
const selectedMonth = $("#month-select").find(":selected").val().toString();
const selectedYear = $("#month-year-select").find(":selected").val().toString();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${selectedMonth}_${selectedYear}`});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectYear(parameterType, parameterOid) {
try {
const selectedYear = $("#month-year-select").find(":selected").val();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: selectedYear.toString()});
} catch(error) {
window.showErrorPopup(error);
}
}
function onDropdownParameterInput(element) {
try {
var searchText = $(element).val();
const id = $(element).attr("id");
let prefix = "";
if (id !== undefined && id !== null && id.includes("-")) {
const splitId = id.split("-");
if(splitId.length > 1) {
prefix = splitId[1];
}
}
if(searchText === null || searchText === undefined || searchText.length === 0) {
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
return;
}
const menuItems = $(`#query-${prefix}-dropdown-menu .dropdown-item`);
menuItems.hide();
$.each(menuItems,
function (index, item) {
const itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText.toLowerCase())) {
$(item).show();
}
});
} catch(error) {
window.showErrorPopup(error);
}
}
function resetDropdownParameterSearch(prefix) {
try {
$(`#query-${prefix}-search-input`).val("");
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
const e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
} catch(error) {
window.showErrorPopup(error);
}
}
function selectEmployeeParameter(element, employeeOid, parameterType, parameterOid) {
try {
$("#query-employee-popup").modal("hide");
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: employeeOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectCustomerParameter(element, customerOid, parameterType, parameterOid) {
try {
$("#query-customer-popup").modal("hide");
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: customerOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectOrganizationParameter(element, organizationOid, parameterType, parameterOid) {
try {
$("#query-organization-popup").modal("hide");
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: organizationOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectServiceCategoryParameter(element, parameterType, parameterOid) {
try {
const serviceCategoryOid = $(element).find(":selected").val();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: serviceCategoryOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectTeamParameter(element, teamOid, parameterType, parameterOid) {
try {
$("#query-team-popup").modal("hide");
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: teamOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectValueListEntry(element, parameterType, parameterOid) {
try {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: $(element).find(":selected").val(), parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectQueryText(element, parameterType, parameterOid) {
try {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val()});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectQueryDate(element, parameterType, parameterOid) {
try {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val().toString()});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectQueryDateRange(parameterType, parameterOid) {
try {
const start = $("#query-date-range-start").val().toString();
const end = $("#query-date-range-end").val().toString();
if(!start || !end) {
return;
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${start}_${end}`});
} catch(error) {
window.showErrorPopup(error);
}
}
function executeQueryButtonClick() {
try {
showSpinner();
$("#msk-report-container").load("@Url.Action("ExecuteQuery")",
function () {
hideSpinner();
$("#bewo-report-popup").modal("show");
});
} catch(error) {
window.showErrorPopup(error);
}
}
</script>
@if(Model.SelectedQuery != null && Model.SelectedQuery.Parameter != null && Model.SelectedQuery.Parameter.Count > 0)
{
<div>
<hr />
@for(var i = 0; i < Model.SelectedQuery.Parameter.Count; i++)
{
var parameter = Model.SelectedQuery.Parameter[i];
if(parameter?.QueryParameterOid is null)
{
continue;
}
var parameterType = (int) parameter.ParamType;
var parameterOid = parameter.QueryParameterOid.Value;
switch(parameter.ParamType)
{
case QueryParameterType.SupportConcept:
var selectedSuportConceptTimeSpanColorClass = Model.SelectedCostBearer2SupportConceptRelListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : Model.SelectedCostBearer2SupportConceptRelListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<div class="form-row">
<div class="col-md">
<div class="container p-0">
<div class="row">
<div class="col mb-3">
<div class="list-group">
<a href="#" class="list-group-item flex-column align-items-start no-underline" data-toggle="modal" data-target="#supportConceptList">
<div class="d-flex">
<h5 class="mb-1 text-dark text-left" id="selectedSupportConceptCustomerInfo">@Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth</h5>
</div>
<p class="mb-1 text-left @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
@Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan
</p>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog text-center modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Hilfeplanauswahl</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<!-- Hilfeplansuche -->
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="supportConceptSearchOnChange()" id="support-concept-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSupportConceptSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<hr />
<!-- Hilfeplanliste -->
<div class="list-group">
@foreach(var supportConceptListObject in Model.CostBearer2SupportConceptRelListObjects)
{
var timeSpanColorClass = supportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : supportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<a href="#" class="list-group-item flex-column align-items-start no-underline blubb-test" onclick="selectCostBearer2SupportConceptRel(@supportConceptListObject.CostBearer2SupportConceptOid, @parameterType, @parameterOid)" data-dismiss="modal">
<div class="justify-content-between">
<h5 class="mb-1 text-dark text-left supportconcept-name-header">
@supportConceptListObject.NameAndDateOfBirth
</h5>
</div>
<p class="mb-1 text-left @timeSpanColorClass">
@supportConceptListObject.SupportConceptTimeSpan
</p>
</a>
}
</div>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Employee:
<div class="form-row">
<div class="col-md mb-3">
@{
var employeeButtonValue = "Mitarbeiter";
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is CompactEmployeeDC selectedEmployee)
{
employeeButtonValue = selectedEmployee.DetailDescription;
}
}
@Html.PopupWithSearchForIFilterables(Model.AllEmployeesForQueries, "selectEmployeeParameter", $"{parameterType}, {parameterOid}", employeeButtonValue, "query-employee-popup", false, true, true, true)
</div>
</div>
break;
case QueryParameterType.Customer:
<div class="form-row">
<div class="col-md mb-3">
@{
var customerButtonValue = "Klient";
if(Model.SelectedValues.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is CompactCustomerDC selectedCustomer)
{
customerButtonValue = selectedCustomer.DetailDescription;
}
}
}
@Html.PopupWithSearchForIFilterables(Model.AllCustomersForQueries, "selectCustomerParameter", $"{parameterType}, {parameterOid}", customerButtonValue, "query-customer-popup", false, true, true, true)
</div>
</div>
break;
case QueryParameterType.Month:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Monat
</div>
</div>
<select class="custom-select" id="month-select" onchange="selectMonth(@parameterType, @parameterOid)">
@foreach(var month in Model.Months)
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is DateTime monthDate && month.Value.Equals(monthDate.Month.ToString()))
{
selected = "selected";
}
}
else
{
var lastMonth = DateTime.Today.AddMonths(-1);
var selectedMonth = lastMonth.Month.ToString();
if(selectedMonth.Equals(month.Text))
{
selected = "selected";
}
}
<option value="@month.Value" @selected>@month.Text</option>
}
</select>
<select class="custom-select" id="month-year-select" onchange="selectMonth(@parameterType, @parameterOid)">
@foreach(var year in MobileUtils.Years)
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is DateTime selectedYear)
{
if(year.Equals(selectedYear.Year))
{
selected = "selected";
}
}
else
{
var lastMonth = DateTime.Today.AddMonths(-1);
var selectedYear2 = lastMonth.Year;
selected = year.Equals(selectedYear2) ? "selected" : string.Empty;
}
<option value="@year" @selected>@year</option>
}
</select>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Date:
var dateValue = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is DateTime queryDate)
{
dateValue = queryDate.ToString("dd.MM.yyyy");
}
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group date" id="query-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Datum
</div>
</div>
<input onfocusout="selectQueryDate(this, @parameterType, @parameterOid)" type="text" id="query-date" value="@dateValue" name="query-date" class="form-control datetimepicker-input" data-target="#query-date-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i>
</div>
</div>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.DateRange:
var startValue = string.Empty;
var endValue = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is BS.Shared.Core.DateTimeSpan dateTimeSpan)
{
startValue = dateTimeSpan.StartDate.ToString("dd.MM.yyyy");
endValue = dateTimeSpan.EndDate.ToString("dd.MM.yyyy");
}
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group date" id="query-date-range-start-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Zeitraum
</div>
</div>
<input onfocusout="selectQueryDateRange(@parameterType, @parameterOid)" value="@startValue" type="text" id="query-date-range-start" name="query-date-range-start" class="form-control datetimepicker-input" data-target="#query-date-range-start-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-range-start-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md">
<div class="form-group">
<div class="input-group date" id="query-date-range-end-picker" data-target-input="nearest">
<input onfocusout="selectQueryDateRange(@parameterType, @parameterOid)" value="@endValue" type="text" id="query-date-range-end" name="query-date-range-end" class="form-control datetimepicker-input" data-target="#query-date-range-end-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-range-end-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i>
</div>
</div>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Team:
<div class="form-row">
<div class="col-md mb-3">
@{
var teamButtonValue = "Team";
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is CompactTeamDC selectedTeam)
{
teamButtonValue = selectedTeam.Name;
}
}
@Html.PopupWithSearchForIFilterables(Model.AllTeamsForQueries, "selectTeamParameter", $"{parameterType}, {parameterOid}", teamButtonValue, "query-team-popup", false, true, true, true)
</div>
</div>
break;
case QueryParameterType.ServiceCategory:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Kategorie
</div>
</div>
<select class="custom-select" id="category-@i-select" onchange="selectServiceCategoryParameter(this, @parameterType, @parameterOid)">
<option value="0"></option>
@foreach(var category in Model.AllServiceCategoriesForQueries)
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is ServiceCategoryDC serviceCategory && serviceCategory.Equals(category))
{
selected = "selected";
}
}
<option value="@category.ServiceCategoryOid" @selected>@category.Name</option>
}
</select>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Text:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Text
</div>
</div>
@{
var selectedText = Model.SelectedValues.ContainsKey(parameterOid) ? Model.SelectedValues[parameterOid].Parameter.ToString() : string.Empty;
}
<input class="form-control w-100" value="@selectedText" type="text" id="query-text" name="query-text" onchange="selectQueryText(this, @parameterType, @parameterOid)" />
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Year:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Jahr
</div>
</div>
<select class="custom-select" id="year-select" onchange="selectYear(@parameterType, @parameterOid)">
@foreach(var year in MobileUtils.Years)
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is int selectedYear && year.Equals(selectedYear))
{
selected = "selected";
}
}
<option value="@MobileUtils.Years.IndexOf(year)" @selected>@year</option>
}
</select>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.ValueListEntryType:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
@{
var parameterName = parameter.Name;
if(parameter.Name.Contains("_"))
{
var splitName = parameter.Name.Split('_');
parameterName = string.Empty;
for(var j = 0; j < splitName.Length - 1; j++)
{
parameterName += splitName[j];
}
}
ValueListEntryDC selectedValueListEntry = null;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is ValueListEntryDC vle)
{
selectedValueListEntry = vle;
}
}
@parameterName
</div>
</div>
<select class="custom-select" id="value-list-entry-@i-select" onchange="selectValueListEntry(this, @parameterType, @parameter.QueryParameterOid)">
<option value="0"></option>
@foreach(var valueListEntry in Model.ValueListEntryTypes2ValueListEntries[Model.GetValueListEntryTypeByQueryParameter(parameter.Name)])
{
var selected = string.Empty;
if(selectedValueListEntry?.Equals(valueListEntry) ?? false)
{
selected = "selected";
}
<option value="@valueListEntry.ValueListEntryOid" @selected>@valueListEntry.DisplayName</option>
}
</select>
</div>
</div>
</div>
</div>
break;
case QueryParameterType.Organisation:
<div class="form-row">
<div class="col-md mb-3">
<div class="dropdown">
@{
var organizationButtonValue = "Organisation";
if(Model.SelectedValues.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is CompactOrganisationDC selectedOrganisation)
{
organizationButtonValue = selectedOrganisation.DetailDescription;
}
}
}
@Html.PopupWithSearchForIFilterables(Model.AllOrganisationForQuery, "selectOrganizationParameter", $"{parameterType}, {parameterOid}", organizationButtonValue, "query-organization-popup", false, true, true, true)
</div>
</div>
</div>
break;
case QueryParameterType.Custom:
<div class="form-row">
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
@parameter.Name
</div>
</div>
<select class="custom-select" id="query-custom-parameter-select" name="query-custom-parameter-select">
@foreach(var x in parameter.CustomValues)
{
<option value="@x">@x</option>
}
</select>
</div>
</div>
</div>
</div>
break;
}
}
<hr />
<div class="form-row">
<div class="col-md">
<button class="btn btn-primary" type="button" onclick="executeQueryButtonClick()">Bericht &ouml;ffnen</button>
</div>
</div>
</div>
}