parent
b6f02e255f
commit
a52cbefd9a
|
@ -23,7 +23,6 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* changes data from shopping times diagram into a readable format for chart.js
|
* changes data from shopping times diagram into a readable format for chart.js
|
||||||
|
@ -35,8 +34,6 @@ import java.util.regex.Pattern;
|
||||||
@WebServlet("/shopping_times")
|
@WebServlet("/shopping_times")
|
||||||
public class ShoppingTimesDiagram extends HttpServlet {
|
public class ShoppingTimesDiagram extends HttpServlet {
|
||||||
|
|
||||||
private static Map<UUID, Map> cache = new HashMap<>();
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 6567531484L;
|
private static final long serialVersionUID = 6567531484L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -53,21 +50,13 @@ public class ShoppingTimesDiagram extends HttpServlet {
|
||||||
|
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
|
||||||
String id = req.getParameter("id");
|
|
||||||
boolean match = Pattern.matches("[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", id);
|
if (req.getParameter("id") == null) {
|
||||||
if (id == null || !match) {
|
result.put("labels", definedOrder);
|
||||||
|
out.print(gson.toJson(result));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
UUID uuid = UUID.fromString(req.getParameter("id"));
|
||||||
UUID uuid = UUID.fromString(id);
|
|
||||||
|
|
||||||
|
|
||||||
if(cache.containsKey(uuid)) {
|
|
||||||
out.print(gson.toJson(cache.get(uuid)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
File file = Data.get(uuid);
|
File file = Data.get(uuid);
|
||||||
|
|
||||||
ShoppingTimes shoppingTimes = new ShoppingTimes(file);
|
ShoppingTimes shoppingTimes = new ShoppingTimes(file);
|
||||||
|
@ -92,7 +81,7 @@ public class ShoppingTimesDiagram extends HttpServlet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.put(uuid, result);
|
|
||||||
out.print(gson.toJson(result));
|
out.print(gson.toJson(result));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Johannes Theiner
|
* @author Johannes Theiner
|
||||||
|
@ -24,8 +23,6 @@ import java.util.regex.Pattern;
|
||||||
@WebServlet("/top_flop")
|
@WebServlet("/top_flop")
|
||||||
public class TopFlopArticleDiagram extends HttpServlet {
|
public class TopFlopArticleDiagram extends HttpServlet {
|
||||||
|
|
||||||
private static Map<UUID, Map> cache = new HashMap<>();
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 6567531464214L;
|
private static final long serialVersionUID = 6567531464214L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,19 +34,7 @@ public class TopFlopArticleDiagram extends HttpServlet {
|
||||||
|
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
|
||||||
String id = req.getParameter("id");
|
UUID uuid = UUID.fromString(req.getParameter("id"));
|
||||||
boolean match = Pattern.matches("[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", id);
|
|
||||||
if(id == null || !match) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UUID uuid = UUID.fromString(id);
|
|
||||||
|
|
||||||
if(cache.containsKey(uuid)) {
|
|
||||||
out.println(gson.toJson(cache.get(uuid)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
File file = Data.get(uuid);
|
File file = Data.get(uuid);
|
||||||
|
|
||||||
TopFlopArticle articles = new TopFlopArticle(file);
|
TopFlopArticle articles = new TopFlopArticle(file);
|
||||||
|
@ -68,8 +53,6 @@ public class TopFlopArticleDiagram extends HttpServlet {
|
||||||
result.put("labels", labels);
|
result.put("labels", labels);
|
||||||
result.put("data", data);
|
result.put("data", data);
|
||||||
|
|
||||||
|
|
||||||
cache.put(uuid, result);
|
|
||||||
out.print(gson.toJson(result));
|
out.print(gson.toJson(result));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -48,5 +48,7 @@ public class Upload extends HttpServlet {
|
||||||
}
|
}
|
||||||
|
|
||||||
Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
|
||||||
|
resp.sendRedirect("");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -19,7 +19,6 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* changes data from week overview into readable format for chart.js
|
* changes data from week overview into readable format for chart.js
|
||||||
|
@ -31,8 +30,6 @@ import java.util.regex.Pattern;
|
||||||
@WebServlet("/week_overview")
|
@WebServlet("/week_overview")
|
||||||
public class WeekOverviewDiagram extends HttpServlet {
|
public class WeekOverviewDiagram extends HttpServlet {
|
||||||
|
|
||||||
private static Map<UUID, Map> cache = new HashMap<>();
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 8484151844118L;
|
private static final long serialVersionUID = 8484151844118L;
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,20 +45,16 @@ public class WeekOverviewDiagram extends HttpServlet {
|
||||||
|
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
|
||||||
String id = req.getParameter("id");
|
|
||||||
boolean match = Pattern.matches("[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", id);
|
|
||||||
|
|
||||||
|
if (req.getParameter("id") == null) {
|
||||||
if (id == null || !match) {
|
result.put("labels", definedOrder);
|
||||||
return;
|
result.put("count", new ArrayList<>());
|
||||||
}
|
result.put("revenue", new ArrayList<>());
|
||||||
|
out.print(gson.toJson(result));
|
||||||
UUID uuid = UUID.fromString(id);
|
|
||||||
if(cache.containsKey(uuid)) {
|
|
||||||
out.println(gson.toJson(cache.get(uuid)));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UUID uuid = UUID.fromString(req.getParameter("id"));
|
||||||
File file = Data.get(uuid);
|
File file = Data.get(uuid);
|
||||||
|
|
||||||
WeekOverview overview = new WeekOverview(file);
|
WeekOverview overview = new WeekOverview(file);
|
||||||
|
@ -86,7 +79,6 @@ public class WeekOverviewDiagram extends HttpServlet {
|
||||||
result.put("count", count);
|
result.put("count", count);
|
||||||
result.put("revenue", revenue);
|
result.put("revenue", revenue);
|
||||||
|
|
||||||
cache.put(uuid, result);
|
|
||||||
out.print(gson.toJson(result));
|
out.print(gson.toJson(result));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,7 +12,6 @@
|
||||||
M.AutoInit();
|
M.AutoInit();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="js/upload.js"></script>
|
|
||||||
<script src="js/cache.js"></script>
|
<script src="js/cache.js"></script>
|
||||||
<script src="js/week_overview.js"></script>
|
<script src="js/week_overview.js"></script>
|
||||||
<script src="js/shopping_times.js"></script>
|
<script src="js/shopping_times.js"></script>
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
media="screen,projection"/>
|
media="screen,projection"/>
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"
|
||||||
integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous"/>
|
integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous"/>
|
||||||
|
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
|
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
|
||||||
|
|
||||||
|
@ -38,7 +37,7 @@
|
||||||
<div class="nav-wrapper col 2 right">
|
<div class="nav-wrapper col 2 right">
|
||||||
<ul class="right hide-on-med-and-down">
|
<ul class="right hide-on-med-and-down">
|
||||||
<li><a data-target="slide-out" class="sidenav-trigger show-on-large"><i
|
<li><a data-target="slide-out" class="sidenav-trigger show-on-large"><i
|
||||||
class="material-icons left">menu</i>Datensätze</a></li><!--Sidenav-->
|
class="material-icons left">menu</i>Menü</a></li><!--Sidenav-->
|
||||||
<li><a href="login.html"><i class="material-icons left">person_outline</i>Logout</a></li><!--Logout-->
|
<li><a href="login.html"><i class="material-icons left">person_outline</i>Logout</a></li><!--Logout-->
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="right">
|
<ul class="right">
|
||||||
|
@ -78,13 +77,13 @@
|
||||||
<li>
|
<li>
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
</li>
|
</li>
|
||||||
<form action="upload" method="post" enctype="multipart/form-data" id="upload">
|
<form action="upload" method="post" enctype="multipart/form-data">
|
||||||
<li>
|
<li>
|
||||||
<br>
|
<br>
|
||||||
<div class="file-field input-field container">
|
<div class="file-field input-field container">
|
||||||
<div class="btn blue-grey lighten-2">
|
<div class="btn blue-grey lighten-2">
|
||||||
<span>File</span>
|
<span>File</span>
|
||||||
<input type="file" name="file" id="file">
|
<input type="file" name="file">
|
||||||
</div>
|
</div>
|
||||||
<div class="file-path-wrapper">
|
<div class="file-path-wrapper">
|
||||||
<input class="file-path validate" type="text" placeholder="Datei hochladen">
|
<input class="file-path validate" type="text" placeholder="Datei hochladen">
|
||||||
|
@ -92,80 +91,9 @@
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<div class="col s12">
|
<div class="col s12 offset-s6">
|
||||||
<button class="btn blue-grey waves-effect waves-light" type="submit" name="action">Hochladen<i
|
<button class="btn blue-grey waves-effect waves-light" type="submit" name="action">Hochladen<i class="material-icons right">file_upload</i></button>
|
||||||
class="material-icons right">file_upload</i></button>
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</form>
|
</form>
|
||||||
|
</ul>
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Modal Structure -->
|
|
||||||
<div id="loading" class="modal">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s1">
|
|
||||||
<div class="preloader-wrapper big active">
|
|
||||||
<div class="spinner-layer spinner-blue">
|
|
||||||
<div class="circle-clipper left">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="gap-patch">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="circle-clipper right">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="spinner-layer spinner-red">
|
|
||||||
<div class="circle-clipper left">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="gap-patch">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="circle-clipper right">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="spinner-layer spinner-yellow">
|
|
||||||
<div class="circle-clipper left">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="gap-patch">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="circle-clipper right">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="spinner-layer spinner-green">
|
|
||||||
<div class="circle-clipper left">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="gap-patch">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
<div class="circle-clipper right">
|
|
||||||
<div class="circle"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3 class="center-align">Analyse wird durchgeführt</h3>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,4 @@
|
||||||
let loading = $('#loading');
|
|
||||||
|
|
||||||
Chart.plugins.register({
|
|
||||||
afterDraw: function(chart) {
|
|
||||||
if (chart.data.datasets[0].data.length === 0) {
|
|
||||||
// No data is present
|
|
||||||
var ctx = chart.chart.ctx;
|
|
||||||
var width = chart.chart.width;
|
|
||||||
var height = chart.chart.height;
|
|
||||||
chart.clear();
|
|
||||||
|
|
||||||
ctx.save();
|
|
||||||
ctx.textAlign = 'center';
|
|
||||||
ctx.textBaseline = 'middle';
|
|
||||||
ctx.font = "16px normal 'Helvetica Nueue'";
|
|
||||||
ctx.fillText('Kein Datenset ausgewählt', width / 2, height / 2);
|
|
||||||
ctx.restore();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
updateDatasets();
|
|
||||||
});
|
|
||||||
|
|
||||||
function clearSelected(){
|
|
||||||
$('#dataset').prop('selectedIndex', -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateDatasets() {
|
|
||||||
let dataset = $('#dataset');
|
let dataset = $('#dataset');
|
||||||
request('files').then(results => {
|
request('files').then(results => {
|
||||||
dataset.empty();
|
dataset.empty();
|
||||||
|
@ -40,7 +11,7 @@ function updateDatasets() {
|
||||||
dataset.formSelect();
|
dataset.formSelect();
|
||||||
});
|
});
|
||||||
updateCache();
|
updateCache();
|
||||||
}
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update all charts with correct values for dataset
|
* update all charts with correct values for dataset
|
||||||
|
|
|
@ -3,10 +3,10 @@ let shopping_result;
|
||||||
let shopping_chart = new Chart(document.getElementById("shopping_times_chart"), {
|
let shopping_chart = new Chart(document.getElementById("shopping_times_chart"), {
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
data: {
|
data: {
|
||||||
labels: [],
|
labels: [1, 2, 3, 4, 5],
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Anzahl verkaufter Artikel',
|
label: 'Anzahl verkaufter Artikel',
|
||||||
data: [],
|
data: [0, 0, 0, 0, 0],
|
||||||
backgroundColor: [
|
backgroundColor: [
|
||||||
'rgba(143, 170, 220, 0.9)',
|
'rgba(143, 170, 220, 0.9)',
|
||||||
'rgba(143, 170, 220, 0.9)',
|
'rgba(143, 170, 220, 0.9)',
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
let form = document.getElementById("upload");
|
|
||||||
|
|
||||||
form.onsubmit = function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
formData.append('file', document.getElementById("file"));
|
|
||||||
|
|
||||||
let xhr = new XMLHttpRequest();
|
|
||||||
|
|
||||||
xhr.onloadstart = function(e) {
|
|
||||||
loading.removeClass("hide");
|
|
||||||
$('.sidenav').sidenav('close');
|
|
||||||
loading.modal('open');
|
|
||||||
}
|
|
||||||
|
|
||||||
xhr.upload.addEventListener("progress", function (event) {
|
|
||||||
if (event.lengthComputable) {
|
|
||||||
self.progress = Math.round(100 / event.total * event.loaded);
|
|
||||||
} else if (this.explicitTotal) {
|
|
||||||
self.progress = Math.min(1, event.loaded / self.explicitTotal);
|
|
||||||
} else {
|
|
||||||
self.progress = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
xhr.onloadend = function (e) {
|
|
||||||
clearSelected();
|
|
||||||
updateDatasets();
|
|
||||||
form.reset();
|
|
||||||
};
|
|
||||||
|
|
||||||
xhr.open('POST', form.getAttribute('action'), true);
|
|
||||||
xhr.send(formData);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
|
@ -3,16 +3,16 @@ let week_result;
|
||||||
let week_overview = new Chart($("#overview_chart"), {
|
let week_overview = new Chart($("#overview_chart"), {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: [],
|
labels: [0, 0, 0, 0, 0],
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: "Warenanzahl",
|
label: "Warenanzahl",
|
||||||
data: [],
|
data: [0, 0, 0, 0, 0],
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: 'rgba(104, 216, 154, 0.5)',
|
backgroundColor: 'rgba(104, 216, 154, 0.5)',
|
||||||
lineTension: 0
|
lineTension: 0
|
||||||
}, {
|
}, {
|
||||||
label: "Einnahmen in €",
|
label: "Einnahmen in €",
|
||||||
data: [],
|
data: [0, 0, 0, 0, 0],
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: 'rgba(113, 114, 231, 1)',
|
backgroundColor: 'rgba(113, 114, 231, 1)',
|
||||||
lineTension: 0
|
lineTension: 0
|
||||||
|
@ -71,5 +71,5 @@ function updateWeekOverview() {
|
||||||
week_overview.data.datasets[0].data = week_result.count;
|
week_overview.data.datasets[0].data = week_result.count;
|
||||||
week_overview.data.datasets[1].data = week_result.revenue;
|
week_overview.data.datasets[1].data = week_result.revenue;
|
||||||
week_overview.update();
|
week_overview.update();
|
||||||
loading.modal('close');
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue