Files
Facilitor/APPL/Consoles/alg_locatie.js
Jos Groot Lipman 2de26ff09e Codereview unused variabelen en zo
svn path=/Website/trunk/; revision=54496
2022-01-12 16:45:17 +00:00

1178 lines
52 KiB
JavaScript

/*
$Revision$
$Id$
File: alg_locatie.js
Description: Sample console for Facilitor Desire Stage 1. It's gonna be big!
*/
/* Configuration parameters, eventually to be defined elsewhere */
const api_locations_filter = "";
const api_buildings_filter = "&buildingfunction=^81"; // exclude de Vervallen gebouwen
const api_disciplinetypes_filter = "";
const api_issuedisciplines_filter = "";
const api_issuetypes_filter = "";
const api_contracts_filter = "";
const api_floors_filter = "";
const api_issues_filter = "&issuetype=^2801"; // exclude de Tolkdiensten
const api_orders_filter = "";
const api_reportsx_filter = "&id=2246"; // test this one
const api_reports_filter = ""; // test-only
var lcl = {
NL: {
"title_show_about": "Over",
"title_show_user": "Gebruiker",
"title_list_locations": "Locaties",
"title_show_location": "Locatie",
"title_list_contracts": "Contracten",
"title_show_contract": "Contract",
"title_list_buildings": "Gebouwen",
"title_show_building": "Gebouw",
"title_filter_floors": "Verdiepingen",
"title_filter_disciplinetypes": "Vakgroeptypen",
"title_filter_issuedisciplines": "Vakgroepen",
"title_filter_issuetypes": "Standaardmeldingen",
"title_list_issues": "Meldingen",
"title_show_issue": "Melding",
"title_show_issue_object": "Object",
"title_list_issue_orders": "Opdrachten",
"title_show_order": "Opdracht"
},
DE: {
"title_show_about": "Betrifft",
"title_show_user": "Gebraucher",
"title_list_locations": "Standorte",
"title_show_location": "Standort",
"title_list_contracts": "Verträge",
"title_show_contract": "Vertrag",
"title_list_buildings": "Gebäude",
"title_show_building": "Gebäude",
"title_filter_floors": "Stockwerke",
"title_filter_disciplinetypes": "Innendiensttypen",
"title_filter_issuedisciplines": "Innendienste",
"title_filter_issuetypes": "Standard Meldungen",
"title_list_issues": "Meldungen",
"title_show_issue": "Meldung",
"title_show_issue_object": "Object",
"title_list_issue_orders": "Aufträge",
"title_show_order": "Auftrag"
},
EN: {
"title_show_about": "About",
"title_show_user": "User",
"title_list_locations": "Locations",
"title_show_location": "Location",
"title_list_contracts": "Contracts",
"title_show_contract": "Contract",
"title_list_buildings": "Buildings",
"title_show_building": "Building",
"title_filter_floors": "Floors",
"title_filter_disciplinetypes": "Discipline types",
"title_filter_issuedisciplines": "Disciplines",
"title_filter_issuetypes": "Issue types",
"title_list_issues": "Issues",
"title_show_issue": "Issue",
"title_show_issue_object": "Object",
"title_list_issue_orders": "Orders",
"title_show_order": "Order"
},
FR: {
"title_show_about": "A propos",
"title_show_user": "Utilisateur",
"title_list_locations": "Emplacements",
"title_show_location": "Emplacement",
"title_list_contracts": "Contracts",
"title_show_contract": "Contract",
"title_list_buildings": "Immeubles",
"title_show_building": "Immeuble",
"title_filter_floors": "étages",
"title_filter_disciplinetypes": "Types de départements",
"title_filter_issuedisciplines": "Départements",
"title_filter_issuetypes": "Appel standard",
"title_list_issues": "Appels",
"title_show_issue": "Appel",
"title_show_issue_object": "équipement",
"title_list_issue_orders": "Missions",
"title_show_order": "Mission"
}
};
// un-comment environment value setting below to see all console.logs
// environment = "development";
$(function() {
"use strict";
// targets ( usualy divs where data is placed)
targets = {
show_about: new Target({
title: "title_show_about",
selector: "show-about",
mode: "show",
columns: {
version: {},
customer: {},
applicationname: {},
url: {},
login: {}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
api2({
url: "persons",
target: "show_user",
filter: "?login=" + dataInfo(obj, 0, "login")
});
console.log("ready trigger stop: " + obj.target);
}
}),
show_user: new Target({
title: "title_show_user",
selector: "show-user",
mode: "show",
columns: {
id: {},
name: {},
language: {}
},
ready: function(obj) {
language = dataInfo(obj, 0, "language") || "NL";
$("h2[name=formtitle]", "#" + targets.show_user.selector).html((lcl[language][targets.show_user.title] || ""));
$("h2[name=formtitle]", "#" + targets.show_about.selector).html((lcl[language][targets.show_about.title] || ""));
api2({
url: "locations",
target: "list_locations",
filter: "?limit=1000&scope=fo" + api_locations_filter
});
api2({
url: "buildings",
target: "list_buildings",
filter: "?limit=1000&scope=fo" + api_buildings_filter
});
api2({
url: "disciplinetypes",
target: "filter_disciplinetypes",
filter: "?limit=1000&scope=fo" + api_disciplinetypes_filter
});
}
}),
list_locations: new Target({
title: "title_list_locations",
selector: "list-locations",
mode: "list",
columns: {
id: {},
code: {},
visitaddress: {},
visitzipcode: {},
visitcity: {},
district: {}
},
trigger: function(event) {
console.log("trigger list_locations");
var $this = $(this),
$this_tr = $this.closest("tr[recid]"),
index;
if ($this_tr.length) {
if (event.ctrlKey) {
// show locations in Facilitor
windowObjectReference = window.open(settings.facilitor_url + "?u=locatie&k=" + $this_tr.attr("recid"));
} else {
if ($this_tr.hasClass("table-success")) {
$this_tr.removeClass("table-success");
index = targets.list_locations.selected_ids.indexOf($this_tr.attr("recid"));
if (index !== -1) {
targets.list_locations.selected_ids.splice(index, 1);
}
} else {
targets.list_locations.data_table
.rows(".table-success").nodes().to$().removeClass("table-success");
$this_tr.addClass("table-success");
targets.list_locations.selected_ids = targets.list_locations.selected_ids || [];
targets.list_locations.selected_ids = [$this_tr.attr("recid")];
}
}
}
$("#" + targets.filter_floors.selector).closest(".row").attr("hidden", true);
api2({
url: "locations",
single: "location",
target: "show_location",
filter: "?limit=1&scope=fo&include=custom_fields&id=" + $this_tr.attr("recid")
});
api2({
url: "contracts",
target: "list_contracts",
filter: "?include=concerns&scope=fo&location=" + $this_tr.attr("recid") + api_contracts_filter
});
// redraw list_buildings table and select first row in case there is only 1 result
console.log("start redrawtable of list_buildings");
redrawTable({
target: "list_buildings"
});
},
ready: function(obj) {
$("#" + targets[obj.target].selector).closest(".row").attr("hidden", false);
targets.list_locations.data_table = $('table', '#' + targets.list_locations.selector).DataTable(tColumnDefs(obj));
initAutocomplete("building-map", "building-view");
// select first row in case there is only 1 result
autoselectRow({
target: obj.target
});
function resizeCards() {
resizeCard(targets.show_contract.selector, targets.list_contracts.selector)();
resizeCard("building-map", targets.list_locations.selector)();
resizeCard(targets.show_building.selector, targets.list_buildings.selector)();
resizeCard(targets.show_issue.selector, targets.list_issues.selector)();
}
$("#" + targets[obj.target].selector).closest("div.card").off("resize").on("resize", resizeCard("building-map", targets.list_locations.selector));
$("input[type=search]", "#" + targets[obj.target].selector).off("input").on("input", resizeCard("building-map", targets.list_locations.selector));
$("input#fluidSwitch").on("change", resizeCards);
resizeCard("building-map", targets.list_locations.selector)();
}
}),
show_location: new Target({
title: "title_show_location",
selector: "show-location",
mode: "show",
columns: {
id: {},
code: {
hidden: true
},
name: {},
district: {}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
$("#" + targets.show_building.selector).attr("hidden", true);
$("#" + targets[obj.target].selector).attr("hidden", false);
// specific form title
$("h2[name=formtitle]", $("#" + targets[obj.target].selector)).html(lcl[language][targets[obj.target].title] + " " + columnInfo(obj, undefined, "code").column_data);
// resize textarea
$("textarea", $("#" + targets[obj.target].selector)).each(function() {
$(this).innerHeight($(this).prop("scrollHeight") + "px");
});
console.log("ready trigger stop: " + obj.target);
}
}),
list_contracts: new Target({
title: "title_list_contracts",
selector: "list-contracts",
mode: "list",
columns: {
id: {},
name: {},
place: {},
contracttype: {},
description: {},
contractor: {},
department: {},
status: {},
enddate: {}
},
trigger: function(event) {
var $this = $(this),
$this_tr = $this.closest("tr[recid]");
if ($this_tr.length) {
if (event.ctrlKey) {
// show locations in Facilitor
windowObjectReference = window.open(settings.facilitor_url + "?u=contract&k=" + $this_tr.attr("recid"));
} else {
targets.list_contracts.data_table
.rows(".table-success").nodes().to$().removeClass("table-success");
$this_tr.addClass("table-success");
}
}
api2({
url: "contracts",
single: "contract",
target: "show_contract",
filter: "?limit=1&scope=fo&include=custom_fields&id=" + $this_tr.attr("recid")
});
},
ready: function(obj) {
$("#" + targets.show_contract.selector).html("");
$("#" + targets.list_contracts.selector).closest(".row").attr("hidden", false);
targets.list_contracts.data_table = $('table', '#' + targets.list_contracts.selector).DataTable(tColumnDefs(obj));
autoselectRow({
target: obj.target
});
$("input[type=search]", "#" + targets.list_contracts.selector).off("input").on("input", resizeCard(targets.show_contract.selector, targets.list_contracts.selector));
resizeCard(targets.show_contract.selector, targets.list_contracts.selector)();
}
}),
show_contract: new Target({
title: "title_show_contract",
selector: "show-contract",
mode: "show",
show_custom_fields: true,
columns: {
id: {},
name: {
hidden: true
},
place: {},
contracttype: {},
description: {},
contractor: {},
department: {},
status: {},
enddate: {}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
$("#" + targets.show_contract.selector).attr("hidden", false);
// specific form title
$("h2[name=formtitle]", $("#" + targets.show_contract.selector)).html(lcl[language][targets.show_contract.title] + " " + columnInfo(obj, undefined, "name").column_data);
// resize textarea
$("textarea", $("#" + targets.show_contract.selector)).each(function() {
$(this).innerHeight($(this).prop("scrollHeight") + "px");
});
console.log("ready trigger stop: " + obj.target);
}
}),
list_buildings: new Target({
title: "title_list_buildings",
selector: "list-buildings",
mode: "list",
columns: {
id: {
label: "Id"
},
code: {
label: "Code"
},
name: {
label: "Naam"
},
location: {
label: "Locatie"
},
buildingfunction: {
label: "Functie"
}
},
trigger: function(event) {
var $this = $(this),
$this_tr = $this.closest("tr[recid]"),
$this_gebouwcode = $("td[name=code]", $this_tr);
if ($this_tr.length) {
if (event.ctrlKey) {
// show locations in Facilitor
windowObjectReference = window.open(settings.facilitor_url + "?u=gebouw&k=" + $this_tr.attr("recid"));
} else {
targets.list_buildings.data_table
.rows(".table-success").nodes().to$().removeClass("table-success");
$this_tr.addClass("table-success");
}
}
codeAddress($("td[name='location']", $this_tr).html());
$("#" + targets.filter_disciplinetypes.selector + ",#" + targets.filter_issuedisciplines.selector + ",#" + targets.report.selector).closest(".row").attr("hidden", false);
// reset classes for all buttons
resetAllButtonClasses({
context: "#filter-disciplinetypes, #filter-issuedisciplines, #filter-issuetypes"
});
$("#" + targets.filter_floors.selector).closest(".row").attr("hidden", true);
api2({
url: "floors",
target: "filter_floors",
filter: "?scope=fo&building=" + $this_tr.attr("recid") + api_floors_filter
});
api2({
url: "buildings",
target: "show_building",
single: "building",
filter: "?limit=1&scope=fo&include=custom_fields&id=" + $this_tr.attr("recid")
});
api2({
url: "issues",
target: "list_issues",
filter: "?limit=1000&scope=fo&building=" + $this_tr.attr("recid") + api_issues_filter
});
// get the default report for the selected building
api2({
url: "reports",
target: "report",
filter: "?usrrap_key=" + targets.reportx.data.id + "&melding_gebouwcode=" + $this_gebouwcode.html()
});
},
ready: function(obj) {
$("#" + targets.list_issue_orders.selector + ",#" + targets.filter_disciplinetypes.selector + ",#" + targets.filter_issuedisciplines.selector + ",#" + targets.report.selector + ",#" + targets.list_issues.selector).closest(".row").attr("hidden", true);
targets.list_buildings.data_table = $('table', '#list-buildings').DataTable(tColumnDefs(obj));
$("#" + targets.list_buildings.selector).closest("div.card").off("resize").on("resize", resizeCard(targets.show_building.selector, targets.list_buildings.selector));
$("input[type=search]", "#" + targets.list_buildings.selector).off("input").on("input", resizeCard(targets.show_building.selector, targets.list_buildings.selector));
resizeCard(targets.show_building.selector, targets.list_buildings.selector)();
}
}),
show_building: new Target({
title: "title_show_building",
selector: "show-building",
mode: "show",
show_custom_fields: true,
columns: {
id: {},
code: {
hidden: true
},
name: {},
buildingfunction: {},
remark: {
type: "textarea"
},
visitable: {},
workdays: {
type: "check"
},
openfrom: {},
opento: {},
email: {}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
$("#" + targets.show_location.selector).attr("hidden", true);
$("#" + targets[obj.target].selector).attr("hidden", false);
// specific form title
$("h2[name=formtitle]", $("#" + targets[obj.target].selector)).html(lcl[language][targets[obj.target].title] + " " + columnInfo(obj, undefined, "code").column_data);
// resize textarea
$("textarea", $("#" + targets.show_issue.selector)).each(function() {
$(this).innerHeight($(this).prop("scrollHeight") + "px");
});
console.log("ready trigger stop: " + obj.target);
}
}),
filter_disciplinetypes: new Target({
title: "title_filter_disciplinetypes",
selector: "filter-disciplinetypes",
filter: true,
color_column: "rgb",
mode: "list",
columns: {
id: {
label: "Id"
},
name: {
label: "Naam"
},
rgb: {
hidden: true
},
symbolname: {
hidden: true
}
},
trigger: function(event) {
var $this = $(this);
if (event.altKey) {
// reset classes for all buttons
resetAllButtonClasses({
context: "#filter-disciplinetypes, #filter-issuedisciplines, #filter-issuetypes"
});
}
// set classes for button dependent on button_selected_class
setButtonClasses({
$this: $this
});
// set full or no class on child buttons dependent on the parent button
setChildSelectedClass({
$this: $this,
name: "disciplinetype",
context: "#filter-issuetypes, #filter-issuedisciplines"
});
// save id's of selected issuetypes in filter_issuetypes object
saveSelectedbuttonIds({
target: "filter_issuetypes",
context: "#filter-issuetypes"
});
// redraw list_issues table and select first row in case there is only 1 result
redrawTable({
target: "list_issues"
});
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
api2({
url: "issuedisciplines",
target: "filter_issuedisciplines",
filter: "?limit=1000&scope=fo" + api_issuedisciplines_filter
});
console.log("ready trigger stop: " + obj.target);
}
}),
filter_issuedisciplines: new Target({
title: "title_filter_issuedisciplines",
selector: "filter-issuedisciplines",
filter: true,
color_column: "colors",
mode: "list",
columns: {
id: {
label: "Id"
},
name: {
label: "Naam"
},
disciplinetype: {
label: "Type",
hidden: true
},
colors: {
hidden: true
},
symbolname: {
hidden: true
}
},
trigger: function(event) {
var $this = $(this);
var disciplinetype = $("div[name=disciplinetype]", $this).attr("recid");
if (event.altKey) {
// reset classes for all buttons
resetAllButtonClasses({
context: "#filter-disciplinetypes, #filter-issuedisciplines, #filter-issuetypes"
});
targets.filter_issuetypes.selected_ids = [];
}
// set classes for button dependent on button_selected_class
setButtonClasses({
$this: $this
});
// set full or no class on child buttons dependent on the parent button
setChildSelectedClass({
$this: $this,
name: "discipline",
context: "#filter-issuetypes"
}).each(function() {
var $this = $(this).closest("button"),
index, recid = $this.attr("recid");
if ($this.hasClass(settings.btn_selected_class)) {
targets.filter_issuetypes.selected_ids.push(recid);
} else {
index = targets.filter_issuetypes.selected_ids.indexOf(recid);
if (index > -1) {
targets.filter_issuetypes.selected_ids.splice(index, 1);
}
}
});
// set partial, full or no class on parent button dependent on the number of selected child buttons
setParentSelectedClass({
name: "disciplinetype",
value: disciplinetype,
context: "#filter-issuedisciplines",
parent: "#filter-disciplinetypes"
});
// redraw list_issues table and select first row in case there is only 1 result
redrawTable({
target: "list_issues"
});
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
api2({
url: "issuetypes",
target: "filter_issuetypes",
filter: "?limit=1000&scope=fo" + api_issuetypes_filter
});
setChildrenColor({ name: "disciplinetype", context: "#" + targets.filter_issuedisciplines.selector, parent: "#" + targets.filter_disciplinetypes.selector });
console.log("ready trigger stop: " + obj.target);
}
}),
filter_issuetypes: new Target({
title: "title_filter_issuetypes",
selector: "filter-issuetypes",
filter: true,
icon_column: "symbolname",
color_column: "colors",
mode: "list",
columns: {
id: {
label: "Id"
},
description: {
label: "Nr"
},
disciplinetype: {
label: "Type",
hidden: true
},
discipline: {
label: "Melder",
hidden: true
},
symbolname: {
hidden: true
},
colors: {
hidden: true
}
},
trigger: function(event) {
var $this = $(this),
index, recid = $(this).attr("recid");
var disciplinetype = $("div[name=disciplinetype]", $this).attr("recid");
var discipline = $("div[name=discipline]", $this).attr("recid");
if (event.altKey) {
// reset classes for all buttons
resetAllButtonClasses({
context: "#filter-disciplinetypes, #filter-issuedisciplines, #filter-issuetypes"
});
targets.filter_issuetypes.selected_ids = [];
}
// set classes for button dependent on button_selected_class
setButtonClasses({
$this: $this
});
if ($this.hasClass(settings.btn_selected_class)) {
targets.filter_issuetypes.selected_ids.push(recid);
} else {
index = targets.filter_issuetypes.selected_ids.indexOf(recid);
if (index > -1) {
targets.filter_issuetypes.selected_ids.splice(index, 1);
}
}
// redraw list_issues table and select first row in case there is only 1 result
redrawTable({
target: "list_issues"
});
// set partial, full or no class on parent button dependent on the number of selected child buttons
setParentSelectedClass({
name: "disciplinetype",
value: disciplinetype,
context: "#filter-issuetypes",
parent: "#filter-disciplinetypes"
});
setParentSelectedClass({
name: "discipline",
value: discipline,
context: "#filter-issuetypes",
parent: "#filter-issuedisciplines"
});
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
setChildrenColor({ name: "discipline", context: "#" + targets.filter_issuetypes.selector, parent: "#" + targets.filter_issuedisciplines.selector });
console.log("ready trigger stop: " + obj.target);
}
}),
reportx: new Target({
selector: "show-reportx",
mode: "show",
columns: {
id: {},
name: {
hidden: true
},
description: {
hidden: true
},
viewname: {
hidden: true
},
count: {
hidden: true
},
pivot: {
hidden: true
},
ratio: {
hidden: true
},
graph: {
hidden: true
},
graph_type: {
hidden: true
}
},
ready: function(obj) {
var self = this;
// specific form title
$("h2[name=formtitle]", $("#" + self.selector)).html(columnInfo(obj, undefined, "name").column_data);
// save data for report
self.data = obj.data.report;
api2({
url: "reports",
target: "report",
filter: "?usrrap_key=" + self.data.id + api_reports_filter
});
}
}),
report: new Target({
title: "title_show_report",
selector: "show-report",
mode: "show",
show_custom_fields: false,
report: true,
ready: function(obj) {
var self = this,
background_colors = [
'rgba(255, 99, 132, 0.5)',
'rgba(54, 162, 235, 0.5)',
'rgba(220,20,60, 0.5)',
'rgba(75, 192, 192, 0.5)',
'rgba(153, 102, 255, 0.5)',
'rgba(95,158,160, 0.5)',
'rgba(148,0,211, 0.5)',
'rgba(192,192,192, 0.5)',
'rgba(128,128,0, 0.5)',
'rgba(139,0,0, 0.5)',
'rgba(50,205,50, 0.5)',
'rgba(255, 159, 64, 0.5)'
],
background_colors_used = obj.data.Mld_v_udr_meldings.map(function(value, index) {
return background_colors[index % 5];
}),
border_colors = [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(220,20,60, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(95,158,160, 1)',
'rgba(148,0,211, 1)',
'rgba(192,192,192, 1)',
'rgba(128,128,0, 1)',
'rgba(139,0,0, 1)',
'rgba(50,205,50, 1)',
'rgba(255, 159, 64, 1)'
],
border_colors_used = obj.data.Mld_v_udr_meldings.map(function(value, index) {
return border_colors[index % 5];
});
console.log("ready trigger start: " + obj.target);
// save data for report
self.data = obj.data.Mld_v_udr_meldings;
// existing graph
console.log({ chartsettings: self.chartsettings });
self.chartsettings = {
type: ['', 'bar', 'area', 'pie', 'line', 'radar'][targets.reportx.data.graph_type.id],
data: {
labels: obj.data.Mld_v_udr_meldings.map(function(value) {
return value.melding_datum;
}),
datasets: [{
label: '#',
data: obj.data.Mld_v_udr_meldings.map(function(value) {
return value.scf_count;
}),
backgroundColor: background_colors_used,
borderColor: border_colors_used,
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
};
if (self.myChart) {
// remove existing labels/datasets
self.myChart.type = self.chartsettings.type;
self.myChart.data = self.chartsettings.data;
self.myChart.update();
// new graph
} else {
self.ctx = document.getElementById(self.selector).getContext('2d');
self.myChart = new Chart(self.ctx, self.chartsettings);
}
if (targets.reportx.data.graph_type.id == 3) {
self.chartsettings.options.scales = {};
}
console.log("ready trigger stop: " + obj.target);
}
}),
filter_floors: new Target({
title: "title_filter_floors",
selector: "filter-floors",
filter: true,
btn_size_class: "col-sm pl-0 pr-0",
btn_has_icon: false,
mode: "list",
columns: {
id: {},
name: {
hidden: true
},
code: {},
sequence: {
hidden: true
},
building: {
hidden: true
}
},
trigger: function() {
var $this = $(this),
building;
// reset classes for all buttons
resetAllButtonClasses({
context: "#filter-floors"
});
setButtonClasses({
$this: $this
});
building = $("div[name=building]", $this).attr("recid");
$("img", $("#" + targets.filter_floors.selector).parent()).attr({
src: '../cad/mySlnk2IMG.asp?labelPos=2&vKey=' + $this.attr("recid") + '&gKey=' + building + '&scenario_key=0&thema=3&label=-1&werkplek=0&mode=0&contmode=0&discs=209&sizeX=' + $("#"+targets.filter_floors.selector).innerWidth() + '&sizeY=500&offsetX=35&offsetY=14&scale=950&paperColor=16777214',
hidden: false
});
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
console.log("obj.data[obj.table].length: " + obj.data[obj.table].length);
if (obj.data[obj.table].length) {
$("#" + targets[obj.target].selector).closest(".row").attr("hidden", false);
// select (click) the first floor button
$("button:first", "#" + targets[obj.target].selector).click();
}
console.log("ready trigger stop: " + obj.target);
}
}),
list_issues: new Target({
title: "title_list_issues",
selector: "list-issues",
mode: "list",
columns: {
id: {},
name: {},
issuetype: {},
requestor: {},
issuedate: {
type: "date" /* overbodig denk ik, maar toont alleen tijd. Dan liever alleen datum (tijdstip komt in de detail)*/
},
subject: {}
},
trigger: function(event) {
var $this = $(this),
$this_tr = $this.closest("tr[recid]");
if ($this_tr.length) {
if (event.ctrlKey) {
// show locations in Facilitor
windowObjectReference = window.open(settings.facilitor_url + "?u=melding&k=" + $this_tr.attr("recid"));
} else {
targets.list_issues.data_table
.rows(".table-success").nodes().to$().removeClass("table-success");
$this_tr.addClass("table-success");
}
}
api2({
url: "issues",
single: "issue",
target: "show_issue",
filter: "?limit=1&scope=fo&include=issueobjects,custom_fields&id=" + $this_tr.attr("recid")
});
api2({
url: "orders",
target: "list_issue_orders",
filter: "?scope=fo&status=1,2,3,4,5,6,7,8,9,10&issue=" + $this_tr.attr("recid") + api_orders_filter
});
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
$("#" + targets.show_issue.selector).html("");
$("#" + targets.list_issue_orders.selector).closest(".row").attr("hidden", true);
$("#" + targets.list_issues.selector).closest(".row").attr("hidden", false);
var disciplinetypes = {},
disciplines = {},
key_count;
// save id's of issuetypes used in table and return the occurences per issuetype
key_count = saveUsedtabledataIds({
name: "issuetype",
target: "filter_issuetypes",
context: "#list-issues"
});
// set button classes for all buttons used in table and fill array with id's of disciplinetypes and disciplines
$.each(targets.filter_issuetypes.selected_ids, function(index, value) {
var $this = $("button[recid=" + value + "]", "#" + targets.filter_issuetypes.selector);
var disciplinetype = $("div[name=disciplinetype]", $this).attr("recid");
var discipline = $("div[name=discipline]", $this).attr("recid");
disciplinetypes[disciplinetype] = disciplinetypes[disciplinetype] ? disciplinetypes[disciplinetype] + key_count[value] : key_count[value];
disciplines[discipline] = disciplines[discipline] ? disciplines[discipline] + key_count[value] : key_count[value];
$("div[name=badge]", $this).html('<span class="badge badge-pill badge-danger">' + key_count[value] + '</span>');
// set classes for button dependent on button_selected_class
setButtonClasses({
$this: $this
});
});
$.each(disciplinetypes, function(key, value) {
// set partial, full or no class on parent button dependent on the number of selected child buttons
setParentSelectedClass({
name: "disciplinetype",
value: key,
context: "#filter-issuetypes",
parent: "#filter-disciplinetypes"
}).children('div[name=badge]').html('<span class="badge badge-pill badge-danger">' + value + '</span></div>');
});
$.each(disciplines, function(key, value) {
// set partial, full or no class on parent button dependent on the number of selected child buttons
setParentSelectedClass({
name: "discipline",
value: key,
context: "#filter-issuetypes",
parent: "#filter-issuedisciplines"
}).children('div[name=badge]').html('<span class="badge badge-pill badge-danger">' + value + '</span></div>');
});
// set hidden attr for buttons dependent on button_selected_class
setButtonHidden({
context: "#filter-issuetypes, #filter-issuedisciplines, #filter-disciplinetypes"
});
targets.list_issues.data_table = $('table', '#list-issues').DataTable(tColumnDefs(obj));
// redraw list_issues table and select first row in case there is only 1 result
redrawTable({
target: "list_issues"
});
$("#list-issue-orders, #show-issue").html(
function() {
return ($("h2", $(this)).length ? "<h2>" + $("h2", $(this)).html() + "</h2><p>Leeg</p>" : "");
});
$("#show-issue-object").html("<h2>object</h2><p>Leeg</p>");
$("#" + targets.list_issues.selector).closest("div.card").off("resize").on("resize", resizeCard(targets.show_issue.selector, targets.list_issues.selector));
$("input[type=search]", "#" + targets.list_issues.selector).off("input").on("input", resizeCard(targets.show_issue.selector, targets.list_issues.selector));
resizeCard(targets.show_issue.selector, targets.list_issues.selector)();
console.log("ready trigger stop: " + obj.target);
}
}),
show_issue: new Target({
title: "title_show_issue",
selector: "show-issue",
mode: "show",
show_custom_fields: true,
columns: {
id: {},
name: {
hidden: true
},
subject: {},
issuetype: {},
description: {
type: "textarea"
},
requestor: {},
contact: {},
issuedate: {},
enddate: {},
progress: {
label: "Voortgang",
type: "progressbar",
valuemin: 0,
valuemax: 100
}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
var days1, days2, valuenow, data_row;
$("#" + targets.show_issue.selector).attr("hidden", false);
// specific form title
$("h2[name=formtitle]", $("#" + targets.show_issue.selector)).html(lcl[language][targets.show_issue.title] + " " + columnInfo(obj, undefined, "name").column_data);
// resize textarea
$("textarea", $("#" + targets.show_issue.selector)).each(function() {
$(this).innerHeight($(this).prop("scrollHeight") + "px");
});
// specific progressbar
days1 = ((new Date().getTime() - new Date(columnInfo(obj, undefined, "issuedate").column_data).getTime()) / day_in_ms).toFixed(2);
days2 = ((new Date(columnInfo(obj, undefined, "enddate").column_data).getTime() - new Date(columnInfo(obj, undefined, "issuedate").column_data).getTime()) / day_in_ms).toFixed(2);
valuenow = (days1 - days2 > 0 || days2 == 0 ? targets[obj.target].columns.progress.valuemax : (days1 / days2 * 100).toFixed(2));
console.log({
days1: days1,
days2: days2,
valuenow: valuenow,
issuedate: columnInfo(obj, undefined, "issuedate").column_data,
issuedateFmt: new Date(columnInfo(obj, undefined, "issuedate").column_data)
});
$("#" + targets.show_issue.selector + "-progress")
.attr({
"aria-valuenow": valuenow
})
.css({
width: valuenow + "%"
})
.toggleClass("bg-danger", valuenow == targets[obj.target].columns.progress.valuemax);
data_row = rowInfo(obj);
if (data_row.issueobjects && data_row.issueobjects.length) {
api2({
url: "objects",
single: "object",
target: "show_issue_object",
filter: "?limit=1&include=custom_fields&id=" + data_row.issueobjects[0].object.id
});
} else {
$("#" + targets.show_issue_object.selector).html("");
}
console.log("ready trigger stop: " + obj.target);
}
}),
show_issue_object: new Target({
title: "title_show_issue_object",
selector: "show-issue-object",
mode: "show",
columns: {
id: {},
name: {},
type: {},
description: {}
},
ready: function(obj) {
$("#" + targets[obj.target].selector).attr("hidden", false);
}
}),
list_issue_orders: new Target({
title: "title_list_issue_orders",
selector: "list-issue-orders",
mode: "list",
columns: {
id: {},
sequence: {},
issueordertype: {},
company: {},
status: {},
description: {}
},
trigger: function(event) {
var $this = $(this),
$this_tr = $this.closest("tr[recid]");
if ($this_tr.length) {
if (event.ctrlKey) {
// show locations in Facilitor
windowObjectReference = window.open(settings.facilitor_url + "?u=opdracht&k=" + $this_tr.attr("recid"));
} else {
targets.list_issue_orders.data_table
.rows(".table-success").nodes().to$().removeClass("table-success");
$this_tr.addClass("table-success");
}
}
api2({
url: "orders",
single: "order",
target: "show_order",
filter: "?limit=1&scope=fo&include=custom_fields&id=" + $this_tr.attr("recid")
});
},
ready: function(obj) {
$("#" + targets.show_order.selector).html("");
$("#" + targets[obj.target].selector).closest(".row").attr("hidden", false);
targets[obj.target].data_table = $('table', '#list-issue-orders').DataTable(tColumnDefs(obj));
// select first row in case there is only 1 result
autoselectRow({
target: obj.target
});
$("input[type=search]", "#" + targets.list_issue_orders.selector).off("input").on("input", resizeCard(targets.show_order.selector, targets.list_issue_orders.selector));
resizeCard(targets.show_order.selector, targets.list_issue_orders.selector)();
}
}),
show_order: new Target({
title: "title_show_order",
selector: "show-order",
mode: "show",
show_custom_fields: true,
columns: {
id: {},
company: {},
account: {},
description: {
type: "textarea"
},
startdate: {},
issue: {
hidden: true
},
sequence: {
hidden: true
},
hours: {},
hourrate: {},
remark: {
type: "textarea"
}
},
ready: function(obj) {
console.log("ready trigger start: " + obj.target);
$("#" + targets[obj.target].selector).attr("hidden", false);
// specific form title
$("h2[name=formtitle]", $("#" + targets[obj.target].selector)).html(lcl[language][targets[obj.target].title] + " " + columnInfo(obj, undefined, "issue").column_data + "/" + columnInfo(obj, undefined, "sequence").column_data);
// resize textarea
$("textarea", $("#" + targets[obj.target].selector)).each(function() {
$(this).innerHeight($(this).prop("scrollHeight") + "px");
});
console.log("ready trigger stop: " + obj.target);
}
})
};
// models required for this dashboard
models = {
about: {},
persons: {},
issues: {},
reportsx: {},
reports: {},
locations: {},
buildings: {},
contracts: {},
floors: {},
orders: {},
objects: {},
disciplinetypes: {},
issuedisciplines: {},
issuetypes: {}
};
// function to filter data on DataTables
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex) {
var target = $("#" + settings.sTableId).attr("name");
// filter list_issues rows on selected disciplinetype buttons, non selected = show all rows
if (target == "list_issues") {
if (!!targets.list_issues.data_table && !!targets.filter_issuetypes.selected_ids && ($("button." + window.settings.btn_selected_class, "#filter-disciplinetypes").length > 0)) {
var value = $('td[name=issuetype]', targets.list_issues.data_table
.row(dataIndex) //get the row to evaluate
.nodes() //extract the HTML - node() does not support to$
.to$()) //get as jQuery object
.attr('recid');
return targets.filter_issuetypes.selected_ids.indexOf(value) != -1;
}
}
// filter list_buildings rows on selected location, non selected = show all rows
if (target == "list_buildings") {
if (!!targets.list_buildings.data_table && !!targets.list_locations.selected_ids && targets.list_locations.selected_ids.length > 0) {
var value = $('td[name=location]', targets.list_buildings.data_table
.row(dataIndex) //get the row to evaluate
.nodes() //extract the HTML - node() does not support to$
.to$()) //get as jQuery object
.attr('recid');
return targets.list_locations.selected_ids.indexOf(value) != -1;
}
}
return true;
}
);
// get model definitions with ajax
for (var model in models) {
api2({
url: model + ".api",
model: model,
filter: "?scope=fo&usrrap_key=2246"
});
}
// first get about-info through ajax
api2({
url: "about",
target: "show_about"
});
// get the default report
api2({
url: "reportsx",
single: "report",
target: "reportx",
filter: "?1=1" + api_reportsx_filter
});
});