SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

534 lines
16 KiB

<%@page pageEncoding="utf-8" contentType="text/html; charset=UTF-8" %>
<html>
<head>
<%
if (request.getCharacterEncoding() == null)
request.setCharacterEncoding("UTF-8");
Object userobject=request.getSession().getAttribute("UserID");
String userid;
String filter="";
String sql="";
if(userobject == null)
{
%>
<jsp:forward page="/edit/not_authenticated.htm"/>
<%
}
else
userid=userobject.toString();
Object mandantobject=request.getSession().getAttribute("MandantenID");
String mandantenid="";
if(mandantobject != null)
mandantenid=mandantobject.toString();
//der superx-Default-Mandant ist bei dbforms ein Leerstring
if(mandantenid.equals("default"))
mandantenid="";
String custom_css=""; //TODO
String tid = request.getParameter("tid");
String fname = request.getParameter("Feldname");
String previousValue = request.getParameter("previousValue");
String zeilenanzahl = request.getParameter("zeilenanzahl");
String referrerForm = request.getParameter("referrerForm");
if(referrerForm==null || referrerForm.equals(""))
referrerForm="maske";
String params = request.getParameter("params");
String callurl="../../servlet/SuperXmlMaske?tid="+tid+"&getJSON_"+fname+"=xxxxxx-xxxxxx@";
callurl+=params;
%>
<%@ include file="../../htmlhead_dialoge.inc" %>
<title>Auswahl <%=fname %></title>
</head>
<script type="text/javascript" language="javascript">
var sichtContentJSON;
var fname="<%= fname %>";
var maskentid="<%= tid %>";
var previousValue="<%= previousValue %>";
var zeilenanzahl="<%= zeilenanzahl %>";
var referrerWindow=window.opener;
var referrerDocument=referrerWindow.document;
var referrerForm=referrerDocument.forms["<%= referrerForm %>"];
previousValue=referrerForm.elements[fname].value;
var referrerFormInputSichtid=referrerForm.elements[fname+"-Sicht"];
var referrerFormInputSichtstand=referrerForm.elements[fname+"-Stand"];
var referrerFormDivSichtauswahlInnerHTML="";
var referrerFormDivSichtstandInnerHTML="";
var selectedSichtid="";
var selectedSichtStand="";
if(referrerFormInputSichtid)
{
var sichtauswahlDiv=referrerDocument.getElementById(fname+"-Sicht-div");
if(sichtauswahlDiv)
referrerFormDivSichtauswahlInnerHTML=sichtauswahlDiv.innerHTML;
selectedSichtid=referrerForm.elements[fname+"-Sicht"].value;
}
if(referrerFormInputSichtstand)
{
var sichtstandDiv=referrerDocument.getElementById(fname+"-Stand-div");
if(sichtstandDiv)
referrerFormDivSichtstandInnerHTML=sichtstandDiv.innerHTML;
selectedSichtStand=referrerForm.elements[fname+"-Stand"].value;
}
var previousValuesArray=ndMaskDialogPreviousValueToArray(previousValue);
var previousValuesCount=0;
if(previousValuesArray)
previousValuesCount=previousValuesArray.length;
var indeterminateValues="";
if(referrerForm.elements[fname+"-IndeterminateValues"])
{
indeterminateValues=referrerForm.elements[fname+"-IndeterminateValues"].value;
}
var indeterminateValuesArray=ndMaskDialogPreviousValueToArray(indeterminateValues);
var indeterminateValuesCount=0;
if(indeterminateValuesArray)
indeterminateValuesCount=indeterminateValuesArray.length;
//previousValuesCount=0; //TODO: wenn previousValue, dann klappt Aufklappen nicht immer
var treeNodes=new Array();
function initDialog(url,searchstring)
{
var ret;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
sichtContentJSON= purgeval(this.responseText);
//console.log(sichtContentJSON);
renderSichtauswahl(sichtContentJSON);
renderSicht(sichtContentJSON,searchstring);
}
};
xhttp.open("GET", url, true);
xhttp.send();
}
//202604 Label aktualisiert: Sicht in Sicht ändern
function renderSichtauswahl(content)
{
var targetDiv=document.getElementById("sichtauswahlDiv");
var zs="";
//zs+="TTT"+JSON.stringify(content.sichten.selected);
if(content && content.sichten.selected && content.sichten.selected.name )
{
zs += "<div class='field is-grouped is-grouped-multiline'><div class='input-container'><label class='label'>Sicht ändern</label>";
//zs += "Ausgewählte Sicht: </span></div>";
//zs+=" <div class='field-body'><div class='field is-active'>";
zs+= buildSichtauswahlSelect(content);
zs+="</div></div>";
if(content.sichten.selected.stand)
{
zs += "<div class='input-container'>";
zs += "<label class='label'>Stand</label>";
zs+="<input type='date' class='input is-small' name='Standdatum' id='Standdatum' maxlength='10' size='3'";
zs+=" value='"+dateGermanToDateUS(content.sichten.stand)+"' onChange='sichtStandchange(this.value)'/>";
zs+="</div>";
//
}
//zs +="</div></div></div>";//von field is-grouped, damit Sicht und Standdatum in einer Zeile sind
}
else
{
zs+="Keine Sichtauswahl m&ouml;glich";
}
//Suche: 202605 is-small entfernt aus class=input und class=button, style für button ergänzt
zs += "<div class='input-container'>";
zs += "<label class='label'>Suche</label>";
zs+="<div class='field has-addons'><div class='control'>";
zs+= "<input id='sichtSuche' class='input is-active' type='text' placeholder='' onBlur='ndSichtEintraegeSuchen(this.value);return false;'/>";
zs+="</div><div class='control'><button class='button is-rounded' onClick='ndSichtEintraegeSuchen(document.getElementById(\'sichtSuche\'));return false;'>";
zs+="<span class='icon' aria-hidden='true' alt='Suche' title='Suche'><img src='../../images/search_blue.svg'/></span></button>";
zs+="</div></div></div>";
targetDiv.innerHTML=zs;
}
function buildSichtauswahlSelect(content)
{
var zs="<div class='select is-small is-focused'><select id='sichtauswahlSelect' name='sichtauswahlSelect' style='max-width: 15rem;' onChange='sichtAuswahlchange(this.value)'>";
zs+="<option class='maskinput' value='"+content.sichten.selected.name_intern+"' selected>";
zs+=content.sichten.selected.name+"</option>";
for(var j=0;j < content.sichten.other.length;j++)
{
var node=content.sichten.other[j];
zs+="<option class='maskinput' value='";
zs+=node.name_intern+"'";
zs+=">"+node.name+"</option>";
}
zs+="</select>";
return zs;
}
function sichtAuswahlchange(gewaehlteSicht)
{
var url="../../servlet/SuperXmlMaske?tid="+maskentid+"&getJSON_"+fname+"=xxxxxx-xxxxxx@";
url+="&"+fname+"-aktualisieren=true&" + fname + "-Sicht=" + gewaehlteSicht;
initDialog(url,'');
}
function sichtStandchange(datumUS)
{
var datum=dateUSToDateGerman(datumUS);
console.log(datum);
var url="../../servlet/SuperXmlMaske?tid="+maskentid+"&getJSON_"+fname+"=xxxxxx-xxxxxx@";
url+="&"+fname+"-aktualisieren=true&" + fname + "-Stand=" + datum;
initDialog(url,'');
}
function renderSicht(content,searchstring)
{
var targetDiv =document.getElementById("sichtDiv");
//targetDiv.innerHTML=JSON.stringify(content);
var zs="";
//zs += "<p>"+selectedSichtid+"</p>";
//zs += "<p>"+selectedSichtStand+"</p>";
//zs += "<p>ttt"+previousValue+"</p>";
//zs +=referrerFormDivSichtauswahlInnerHTML;
//zs +=referrerFormDivSichtstandInnerHTML;
//zs +=JSON.stringify(content);
zs +="<ul id='sichtentreeUL'>"
if(content && content.nodes && content.nodes.length >0)
{
//zs +="<li>content.nodes.length"+content.nodes.length+"</li>";
for(var j=0;j < content.nodes.length;j++)
{
var node=content.nodes[j];
zs +=renderNode(node,null,//parent
true,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl);
}
}
zs +="</ul>";
targetDiv.innerHTML=zs;
checkIndeterminates();
}
function renderNode(node,parentId,isRoot,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl)
{
var zs="";
if(searchstring=="" || node.title.indexOf(searchstring)>-1)
{
if(node.objectId !="")
{
console.log("RenderNode"+node.objectId);
var checkedString="";
for(var i=0;i < previousValuesCount;i++)
{
if(previousValuesArray[i]==node.objectId)
checkedString="checked ";
}
var fldName="inp"+node.objectId;
var fldId="inp"+node.objectId;
var fldType="checkbox";
if(zeilenanzahl==1)
{
fldName=fname;
fldType="radio";
}
if (node.nodeattrib && node.nodeattrib == 3)
{ //nicht sichtbar, kommt aber in Auswertung raus:
zs +="";//<span>"+node.title+"</span>";
}
else
{
zs += "<li class='sichtentreeLI'>";
if(isRoot)
{
zs+="<span style='margin-left:1.5rem'></span>";
}
else
{
if(node.isFolder=="true")
{
zs+="<span class='sichtentreeCaret' id='sichtentreeCaret_"+node.objectId+"'";
zs+="onClick=\"getChildNodes('"+node.objectId.trim()+"',this)\">";
zs+="</span>&nbsp;";
}
else
zs+="<span style='margin-left:15px'></span>";
}
if (node.nodeattrib && node.nodeattrib == 2)
{ //nicht selektierbar:
zs +="<span style='margin-left:10px' class='is-unselectable'>&nbsp;</span>";
zs +="<span>"+node.title+"</span>\n";
}
else {
zs+="<input type='"+fldType+"' "+checkedString+ " name='"+fldName+ "' id='"+fldId+ "' value='"+node.objectId +"' onChange='uncheckParents(this)' class='regularCheckbox' />&nbsp;";
zs +="<label for='"+fldId+"' id='label"+node.objectId +"'>"+node.title+"</label>\n";
}
if(node.children && node.children.length >0 )
{
for(var i=0;i < node.children.length;i++)
{
zs+="<ul style='margin-left:10px'>";
zs += renderNode(node.children[i],node.objectId,//parent
false,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl);
zs +="</ul>";
}
}
zs+="</li>";
//register Node in treeNodes:
var myNode=new treeNode(node.title , //name
node.objectId, //apnr
parentId ,//parent,
0, //level,
node.nodeattrib,
"",//linkUrl,
"",//linkTarget,
"",//onClickHandler,
node.isFolder);
treeNodes.push(myNode);
}
} // wenn nodeattrib !=3
} //Ende wenn suchstring
return zs;
}
function uncheckParents(inpElem)
{
if(inpElem.checked || inpElem.indeterminate)
{
//parents unchecked:
currentNodeId=inpElem.value;
parentNodeId=getParentNode(currentNodeId);
for(var j=0;j < document.forms['selection'].elements.length;j++)
{
var el=document.forms['selection'].elements[j];
if(el.type=="checkbox" && el.value==parentNodeId)
{
console.log("INPUT found:"+el.id);
el.indeterminate=true;
el.checked=false;
uncheckParents(el);
}
}
}
return true;
}
function getParentNode(targetNodeId)
{
var parent;
for(var i=0;i < treeNodes.length;i++)
{
var node=treeNodes[i];
if(node.apnr==targetNodeId)
{
parent=node.parent;
}
}
return parent;
}
function getChildNodes(nodeId,spanElem)
{
//spanElem.parentElement.querySelector(".sichtentreeNested").classList.toggle("sichtentreeActive");
var childUlId="childOf"+nodeId;
spanElem.classList.toggle("sichtentreeCaret-down");
if(document.getElementById(childUlId))
{
//Kind existiert bereits, wird nur unsichtbar:
document.getElementById(childUlId).classList.toggle("sichtentreeNested");
}
else
{
//Kind existiert noch nicht:
const childUL=document.createElement("ul");
childUL.id=childUlId;
childUL.classList.add("sichtentreeChildUL");
spanElem.parentElement.appendChild(childUL);
var url="../../servlet/SuperXmlMaske?tid="+maskentid+"&getJSON_"+fname+"="+nodeId; //xxxxxx-xxxxxx@";
var suburl=url+"&"+fname+"="+nodeId;
var ret;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
childrenJSON= purgeval(this.responseText);
//childUL.innerHTML=JSON.stringify(sichtContentJSON);
var childrenHTML="";
if(childrenJSON && childrenJSON.length >0)
{
//zs +="<li>content.nodes.length"+content.nodes.length+"</li>";
for(var j=0;j < childrenJSON.length;j++)
{
var node=childrenJSON[j];
childrenHTML +=renderNode(node,nodeId,//parent
false,"",previousValuesCount,previousValuesArray,zeilenanzahl);
}
}
childUL.innerHTML=childrenHTML;
//alert(JSON.stringify(childrenJSON));
checkIndeterminates();
}
};
xhttp.open("GET", suburl, true);
xhttp.send();
}
}
function checkIndeterminates()
{
if(indeterminateValuesCount>0)
{
for(var i=0;i < indeterminateValuesCount;i++)
{
for(var j=0;j < document.forms["selection"].elements.length;j++)
{
if(indeterminateValuesArray[i]==document.forms["selection"].elements[j].value)
{
document.forms["selection"].elements[j].indeterminate=true;
}
}
}
}
}
function ndSichtEintraegeSuchen(was) {
var callurl = '/superx/servlet/SuperXmlMaske';
callurl += '?tid=' + maskentid + '&getJSON_' + fname +
'=search:' + getEncoded(was);
//document.getElementById('progressbar').style.display = "";
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var searchResultJSON= purgeval(this.responseText);
//document.getElementById("sichtDiv").innerHTML=JSON.stringify(searchResultJSON);
var searchResultHTML="<ul>";
if(searchResultJSON && searchResultJSON.length >0)
{
for(var j=0;j < searchResultJSON.length;j++)
{
var node=searchResultJSON[j];
searchResultHTML += renderNode(node,null,//parent
true,"",previousValuesCount,previousValuesArray,zeilenanzahl);
}
}
document.getElementById("sichtDiv").innerHTML=searchResultHTML+"</ul>";
//alert(JSON.stringify(childrenJSON));
}
};
xhttp.open("GET", callurl, true);
xhttp.send();
}
</script>
<style type="text/css">
input.regularCheckbox
{
width: 1em;
height: 1em;
accent-color: green;
}
input.parentCheckbox
{
accent-color: gray;
}
input.parentCheckbox::before
{
background-color:blue;
}
</style>
<body class="has-navbar-fixed-top" onload="initDialog('<%=callurl %>','')">
<div id="nd_navi_top" > <!-- 202606 entfernt style="margin-top:-55px"-->
<nav class="navbar-dialogue is-fixed-top" role="navigation" aria-label="navigation">
<div class="navbar-brand">
<div class="navbar-item">
<p class="title-dialogue is-4" ><%=fname %></p>
</div>
</div>
<div class="navbar-end"><span class="navbar-end">
<div class="navbar-item is-hoverable">
<div class="buttons">
<p class="submit_button">
<button class="button" type="submit">
<a onclick="ndMaskSichtDialogUebernehmen(document.forms['selection'],referrerForm)">Übernehmen</a>
</button>
</p>
</div>
</div>
<div class="navbar-item is-hoverable">
<div class="buttons">
<p class="reset_button">
<button class="button">
<a onclick="ndMaskDialogLeeren(document.forms['selection'],referrerForm)">Leeren</a>
</button>
</p>
</div>
</div>
<div class="navbar-item is-hoverable">
<div class="buttons">
<p class="close_button">
<button class="button">
<span class="icon is-small">
<a onclick="window.close();">
<img src="../../images/close.svg" title="Schließen" aria-label="Schließen" /></a>
</span>
</button>
</p>
</div>
</div>
</span>
</div>
</nav>
<!--<div class="container"> doppelte scrollbalken verhindern-->
<form name="selection" onsubmit="return false;" style="margin:0px">
<div class="input-container sticky-filter"> <!--202606 sticky-filter ergänzt-->
<div class="field is-grouped is-grouped-multiline">
<div class="input-container">
<div id="sichtauswahlDiv">
</div>
</div>
</div>
</div>
<% if(zeilenanzahl!=null && !zeilenanzahl.equals("1"))
{
%>
<div class="input-container"><!--202606 neu-->
<div class="buttons">
<input type="checkbox" name="metaCheckox" value="" style="margin-left:1.5rem;" onclick="ndMaskDialogToggleAllCheckboxes(document.forms['selection'],this)" />&#160; alle markieren
</div>
</div><!--202606 neu-->
<%
}
%>
<div id="sichtDiv" class="comboDiv">keine Auswahl m&ouml;glich
</div>
</form>
<!--</div> container-->
</div> <!--Ende nd_navi-top-->
</body>
</html>