changed behaviour
This commit is contained in:
parent
e379ef8c29
commit
cc4201f2b5
32
backend.php
32
backend.php
@ -20,3 +20,35 @@ if ($_GET['controller'] == "Article"){
|
|||||||
echo "Artikel wurden gespeichert.";
|
echo "Artikel wurden gespeichert.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($_GET['controller'] == "Inventur"){
|
||||||
|
if ($_GET['action'] == "export") {
|
||||||
|
$json = file_get_contents('php://input');
|
||||||
|
$list = json_decode($json, true);
|
||||||
|
$fp = fopen('data/inventur_'.date('Y-m-d').'.csv', 'w');
|
||||||
|
|
||||||
|
fputcsv($fp,array_keys(flatten($list[0])));
|
||||||
|
foreach ($list as $obj) {
|
||||||
|
$fields = flatten($obj);
|
||||||
|
//array_walk_recursive($obj, function($a)use (&$fields) { $fields[] = $a;});
|
||||||
|
//print_r($fields);
|
||||||
|
fputcsv($fp,$fields);
|
||||||
|
}
|
||||||
|
echo "Inventur wurde gespeichert.";
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function flatten($array, $prefix = '') {
|
||||||
|
$result = array();
|
||||||
|
foreach($array as $key=>$value) {
|
||||||
|
if(is_array($value)) {
|
||||||
|
$result = $result + flatten($value, $prefix . $key . '_');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$result[$prefix . $key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
[{
|
[{
|
||||||
"name": "Edelpils",
|
"name": "Edelpils",
|
||||||
|
"short": "Pils",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.33,
|
"size": 0.33,
|
||||||
@ -12,6 +13,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Schwarzbier",
|
"name": "Schwarzbier",
|
||||||
|
"short": "Sb",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.33,
|
"size": 0.33,
|
||||||
@ -24,6 +26,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Schöfferhofer",
|
"name": "Schöfferhofer",
|
||||||
|
"short": "Schö",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.33,
|
"size": 0.33,
|
||||||
@ -36,6 +39,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Bitburger af.",
|
"name": "Bitburger af.",
|
||||||
|
"short": "0%",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.33,
|
"size": 0.33,
|
||||||
@ -48,6 +52,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Weiswein",
|
"name": "Weiswein",
|
||||||
|
"short": "WW",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -60,6 +65,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Rotwein",
|
"name": "Rotwein",
|
||||||
|
"short": "RW",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.75,
|
"size": 0.75,
|
||||||
@ -72,6 +78,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Secco",
|
"name": "Secco",
|
||||||
|
"short": "Sekt",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.75,
|
"size": 0.75,
|
||||||
@ -84,6 +91,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "B-Saft",
|
"name": "B-Saft",
|
||||||
|
"short": "BS",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -96,6 +104,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "K-Saft",
|
"name": "K-Saft",
|
||||||
|
"short": "KS",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -108,6 +117,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "O-Saft",
|
"name": "O-Saft",
|
||||||
|
"short": "OS",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -120,6 +130,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "G-Saft",
|
"name": "G-Saft",
|
||||||
|
"short": "GS",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -132,6 +143,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Vita Cola",
|
"name": "Vita Cola",
|
||||||
|
"short": "Co",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -144,6 +156,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Vita Orange",
|
"name": "Vita Orange",
|
||||||
|
"short": "Fa",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -156,6 +169,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Vita Zitrone",
|
"name": "Vita Zitrone",
|
||||||
|
"short": "Spr",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -168,6 +182,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Tonic",
|
"name": "Tonic",
|
||||||
|
"short": "To",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -180,6 +195,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Bitter Lemon",
|
"name": "Bitter Lemon",
|
||||||
|
"short": "BL",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -192,6 +208,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Ginger Ale",
|
"name": "Ginger Ale",
|
||||||
|
"short": "GA",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -204,6 +221,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Apfelschorle",
|
"name": "Apfelschorle",
|
||||||
|
"short": "AS",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -216,6 +234,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "TWQ naturell",
|
"name": "TWQ naturell",
|
||||||
|
"short": "W-",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -228,6 +247,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "TWQ medium",
|
"name": "TWQ medium",
|
||||||
|
"short": "W",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -240,6 +260,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "TWQ classic",
|
"name": "TWQ classic",
|
||||||
|
"short": "W+",
|
||||||
"dimension": "l",
|
"dimension": "l",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 0.25,
|
"size": 0.25,
|
||||||
@ -252,6 +273,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Kaffee",
|
"name": "Kaffee",
|
||||||
|
"short": "TK",
|
||||||
"dimension": "Tasse",
|
"dimension": "Tasse",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -264,6 +286,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Latte Macchiato",
|
"name": "Latte Macchiato",
|
||||||
|
"short": "LM",
|
||||||
"dimension": "Glas",
|
"dimension": "Glas",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -276,6 +299,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "dopp. Esp.",
|
"name": "dopp. Esp.",
|
||||||
|
"short": "dEsp",
|
||||||
"dimension": "Tasse",
|
"dimension": "Tasse",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -288,6 +312,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Brezel",
|
"name": "Brezel",
|
||||||
|
"short": "Br",
|
||||||
"dimension": "Stück",
|
"dimension": "Stück",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
@ -300,6 +325,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"name": "Schokoriegel",
|
"name": "Schokoriegel",
|
||||||
|
"short": "Schoko",
|
||||||
"dimension": "Stück",
|
"dimension": "Stück",
|
||||||
"content": {
|
"content": {
|
||||||
"size": 1,
|
"size": 1,
|
||||||
|
|||||||
27
data/inventur_2018-01-25.csv
Normal file
27
data/inventur_2018-01-25.csv
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
article_name,article_short,article_dimension,article_content_size,article_content_price,article_portion_size,article_portion_price,article_portion_type,end,start,fetched,lost
|
||||||
|
Edelpils,Pils,l,0.33,0,0.33,3.5,Fl.,0,0,0,0
|
||||||
|
Schwarzbier,Sb,l,0.33,0,0.33,3.5,Fl.,0,0,0,0
|
||||||
|
Schöfferhofer,Schö,l,0.33,0,0.33,3.5,Fl.,0,0,0,0
|
||||||
|
"Bitburger af.",0%,l,0.33,0,0.33,3.5,Fl.,0,0,0,0
|
||||||
|
Weiswein,WW,l,1,0,0.2,6,Gl.,0,0,0,0
|
||||||
|
Rotwein,RW,l,0.75,0,0.2,6.5,Gl.,0,0,0,0
|
||||||
|
Secco,Sekt,l,0.75,0,0.1,6,Gl.,0,0,0,0
|
||||||
|
B-Saft,BS,l,1,0,0.2,3.5,Gl.,0,0,0,0
|
||||||
|
K-Saft,KS,l,1,0,0.2,3.5,Gl.,0,0,0,0
|
||||||
|
O-Saft,OS,l,1,0,0.2,3.5,Gl.,0,0,0,0
|
||||||
|
G-Saft,GS,l,1,0,0.2,3.5,Gl.,0,0,0,0
|
||||||
|
"Vita Cola",Co,l,1,0,0.2,2.5,Gl.,0,0,0,0
|
||||||
|
"Vita Orange",Fa,l,1,0,0.2,2.5,Gl.,0,0,0,0
|
||||||
|
"Vita Zitrone",Spr,l,1,0,0.2,2.5,Gl.,0,0,0,0
|
||||||
|
Tonic,To,l,0.25,0,0.25,3,Fl.,0,0,0,0
|
||||||
|
"Bitter Lemon",BL,l,0.25,0,0.25,3,Fl.,0,0,0,0
|
||||||
|
"Ginger Ale",GA,l,0.25,0,0.25,3,Fl.,0,0,0,0
|
||||||
|
Apfelschorle,AS,l,0.25,0,0.25,3,Fl.,0,0,0,0
|
||||||
|
"TWQ naturell",W-,l,0.25,0,0.25,2.5,Fl.,0,0,0,0
|
||||||
|
"TWQ medium",W,l,0.25,0,0.25,2.5,Fl.,0,0,0,0
|
||||||
|
"TWQ classic",W+,l,0.25,0,0.25,2.5,Fl.,0,0,0,0
|
||||||
|
Kaffee,TK,Tasse,1,0,1,2.5,T,0,0,0,0
|
||||||
|
"Latte Macchiato",LM,Glas,1,0,1,3.5,Gl.,0,0,0,0
|
||||||
|
"dopp. Esp.",dEsp,Tasse,1,0,1,3.5,T,0,0,0,0
|
||||||
|
Brezel,Br,Stück,1,0,1,2.5,Stk.,0,0,0,0
|
||||||
|
Schokoriegel,Schoko,Stück,1,0,1,2,Stk.,0,0,0,0
|
||||||
|
21
index.html
21
index.html
@ -38,10 +38,14 @@
|
|||||||
<div v-for="(a, index) in articles" class="card">
|
<div v-for="(a, index) in articles" class="card">
|
||||||
<div class="card-content row">
|
<div class="card-content row">
|
||||||
<span class="card-title">{{ a.name }}</span>
|
<span class="card-title">{{ a.name }}</span>
|
||||||
<div class="input-field inline col s12">
|
<div class="input-field inline col s8">
|
||||||
<input v-model="a.name" placeholder="Artikelname" class="validate" :id="'a_name_'+index">
|
<input v-model="a.name" placeholder="Artikelname" class="validate" :id="'a_name_'+index">
|
||||||
<label :for="'a_name_'+index" class="active">Name</label>
|
<label :for="'a_name_'+index" class="active">Name</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="input-field inline col s4">
|
||||||
|
<input v-model="a.short" placeholder="Kurzname" class="validate" :id="'a_short_'+index">
|
||||||
|
<label :for="'a_short_'+index" class="active">Kürzel</label>
|
||||||
|
</div>
|
||||||
<div class="input-field col s8">
|
<div class="input-field col s8">
|
||||||
<input v-model.number="a.content.size" placeholder="Gesamtinhalt" type="number" class="validate" step="0.01" :id="'a_csize_'+index">
|
<input v-model.number="a.content.size" placeholder="Gesamtinhalt" type="number" class="validate" step="0.01" :id="'a_csize_'+index">
|
||||||
<label :for="'a_csize_'+index" class="active">Gesamtinhalt</label>
|
<label :for="'a_csize_'+index" class="active">Gesamtinhalt</label>
|
||||||
@ -74,9 +78,6 @@
|
|||||||
<a class="" href="#">Artikel löschen</a>
|
<a class="" href="#">Artikel löschen</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div slot="footer">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12" id="inventory" v-if="ready">
|
<div class="col s12" id="inventory" v-if="ready">
|
||||||
<div v-for="(a, index) in inventory.ug" class="card hoverable">
|
<div v-for="(a, index) in inventory.ug" class="card hoverable">
|
||||||
@ -109,7 +110,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12" id="calc" v-if="ready">
|
<div class="col s12" id="calc" v-if="ready">
|
||||||
<div class="row">
|
<div class="row pin-top">
|
||||||
<div class="col s12 m4 card darken-4 grey grey-text text-lighten-2">
|
<div class="col s12 m4 card darken-4 grey grey-text text-lighten-2">
|
||||||
<table class="card-content">
|
<table class="card-content">
|
||||||
<tr v-for="item in bonned(bon)">
|
<tr v-for="item in bonned(bon)">
|
||||||
@ -126,12 +127,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col s12 m8">
|
<div class="col s12 m8">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s4" v-for="a in bon">
|
<div class="col s3" v-for="a in bon">
|
||||||
<button class="waves-effect waves-light btn-large btn-flat col s12" @click="a.count++;">{{ a.name }}</button>
|
<button class="waves-effect waves-light btn-large btn-flat col s12" @click="a.count++;">{{ a.short }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s4">
|
<div class="col s3">
|
||||||
<button class="waves-effect waves-light btn-large orange col s12" @click="resetBon">Reset</button>
|
<button class="waves-effect waves-light btn-large orange col s12" @click="resetBon">Reset</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -152,10 +153,10 @@
|
|||||||
<a href="#" class="btn-floating tooltipped" data-position="left" @click="addArticle" data-tooltip="Artikel hinzufügen"><i class="material-icons">add</i></a>
|
<a href="#" class="btn-floating tooltipped" data-position="left" @click="addArticle" data-tooltip="Artikel hinzufügen"><i class="material-icons">add</i></a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="view == 'inventur'">
|
<li v-if="view == 'inventur'">
|
||||||
<a href="#" class="btn-floating tooltipped" data-position="left" @click="storeArticles" data-tooltip="Artikelliste speichern"><i class="material-icons">save</i></a>
|
<a href="#" class="btn-floating tooltipped" data-position="left" @click="resetInventur" data-tooltip="Inventur zurücksetzen"><i class="material-icons">reset</i></a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="view == 'inventur'">
|
<li v-if="view == 'inventur'">
|
||||||
<a href="#" class="btn-floating tooltipped" data-position="left" @click="addArticle" data-tooltip="Artikel hinzufügen"><i class="material-icons">add</i></a>
|
<a href="#" class="btn-floating tooltipped" data-position="left" @click="exportInventur" data-tooltip="Inventur exportieren"><i class="material-icons">export</i></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
18
js/app.js
18
js/app.js
@ -9,13 +9,6 @@ Vue.filter('number', function(number, precision = 2){
|
|||||||
var app = new Vue({
|
var app = new Vue({
|
||||||
el: "#app",
|
el: "#app",
|
||||||
data : {
|
data : {
|
||||||
dimensions: [
|
|
||||||
'l',
|
|
||||||
'Stk.',
|
|
||||||
'Gl.',
|
|
||||||
'Fl.',
|
|
||||||
'T.',
|
|
||||||
],
|
|
||||||
articles : [],
|
articles : [],
|
||||||
inventory : {
|
inventory : {
|
||||||
ug : [],
|
ug : [],
|
||||||
@ -70,13 +63,22 @@ var app = new Vue({
|
|||||||
ia = new InventoryArticle();
|
ia = new InventoryArticle();
|
||||||
ia.article = a;
|
ia.article = a;
|
||||||
this.inventory.ug.push(ia);
|
this.inventory.ug.push(ia);
|
||||||
this.bon.push({count: 0, name: a.name, price: a.portion.price});
|
this.bon.push({count: 0, name: a.name, short: a.short, price: a.portion.price});
|
||||||
});
|
});
|
||||||
}).then( x => {
|
}).then( x => {
|
||||||
M.updateTextFields();
|
M.updateTextFields();
|
||||||
this.ready = true;
|
this.ready = true;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
resetInventur: function() {
|
||||||
|
|
||||||
|
},
|
||||||
|
exportInventur: function() {
|
||||||
|
this.$http.post('./backend?controller=Inventur&action=export', JSON.stringify(this.inventory.ug))
|
||||||
|
.then(response => {
|
||||||
|
M.toast({html: response.body});
|
||||||
|
})
|
||||||
|
},
|
||||||
resetBon: function(article) {
|
resetBon: function(article) {
|
||||||
this.bon.forEach(function (item){
|
this.bon.forEach(function (item){
|
||||||
item.count = 0;
|
item.count = 0;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
function Article() {
|
function Article() {
|
||||||
this.name = "";
|
this.name = "";
|
||||||
|
this.short = "";
|
||||||
this.dimension = "";
|
this.dimension = "";
|
||||||
this.content = {
|
this.content = {
|
||||||
size : 0,
|
size : 0,
|
||||||
@ -19,6 +20,12 @@ Article.prototype = {
|
|||||||
set Name(value) {
|
set Name(value) {
|
||||||
this.name = value;
|
this.name = value;
|
||||||
},
|
},
|
||||||
|
get Short() {
|
||||||
|
return this.short;
|
||||||
|
},
|
||||||
|
set Short(value) {
|
||||||
|
this.short = value;
|
||||||
|
},
|
||||||
get ContentSize() {
|
get ContentSize() {
|
||||||
return this.content.size;
|
return this.content.size;
|
||||||
},
|
},
|
||||||
@ -61,6 +68,7 @@ Article.thaw = function (json) {
|
|||||||
var article = new Article();
|
var article = new Article();
|
||||||
article.id = json.id;
|
article.id = json.id;
|
||||||
article.Name = json.name;
|
article.Name = json.name;
|
||||||
|
article.Short = json.short;
|
||||||
article.Dimension = json.dimension;
|
article.Dimension = json.dimension;
|
||||||
article.ContentSize = json.content.size;
|
article.ContentSize = json.content.size;
|
||||||
article.PortionPrice = json.portion.price;
|
article.PortionPrice = json.portion.price;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user