<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
-<script src="js/app.js"></script>
+<script src="js/mainapp.js"></script>
<script>if (window.module) module = window.module;</script>
<script src="renderer.js"></script>
</body>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
+<link rel="stylesheet" href="node_modules/bootstrap-table/dist/bootstrap-table.min.css">
+<link rel="stylesheet" href="css/cashbox.epic.css">
+<link rel="stylesheet" href="css/app.css">
+<title>CASHBOX</title>
+</head>
+<body>
+ <!--New Start-->
+ <div class="d-flex" id="wrapper">
+ <div class="container">
+ <div class="row " style="margin-top: 150px;">
+ <div class="col-md-12 justify-content-center text-center">
+ <img src="img/cashbox.png" style="width: 256px;"><br/><h1 class="text-white text-center" style="width: 100%">CashBox</h1>
+ </div>
+ <div class="col-md-2 justify-content-center text-center">
+ <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+
+ <div class="text-center">
+ <div class="btn-group" role="group" aria-label="Basic example">
+ <button class="btn btn-primary" onclick="browserapp.loadview('cashbox');"><i class="fas fa-plus"></i><br/>Kasse</button>
+ <button class="btn btn-primary" onclick="browserapp.loadview('admin');"><i class="fas fa-edit"></i><br/>Verwaltung</button>
+ </div>
+ </div>
+ </nav>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- Sidebar -->
+ <!-- <div class="bg-dark border-right" id="sidebar-wrapper">
+ <div class="sidebar-heading"><a href="javascript:location.href='index.html';"><img src="img/cashbox.png" style="width: 140px;"><br/>Invoice Journal</a></div>
+ <div class="list-group list-group-flush">
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('overview');">Übersicht</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('invoices');">Rechnungen</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('accounts');">Konten</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('bankaccount');">Bankkonto</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('offers');">Angebote</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('products');">Produkte</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('settings');">Einstellungen</a></li>
+
+ </div>
+ </div> -->
+ <!-- /#sidebar-wrapper -->
+
+ <!-- Page Content -->
+ <!-- <div id="page-content-wrapper">
+ <iframe id="moduleframe" src="modules/overview/index.html" style="width: 100%;height: 100vh; border: 0px;">
+ </iframe>
+ </div> -->
+ <!-- /#page-content-wrapper -->
+
+ </div>
+ <!--New End-->
+
+<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
+<script src="node_modules/jquery/dist/jquery.min.js"></script>
+<script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+
+<script src="js/mainapp.js"></script>
+<script>if (window.module) module = window.module;</script>
+<script src="renderer.js"></script>
+</body>
+</html>
\ No newline at end of file
background-repeat: no-repeat;
}
+select.bg-primary, select.bg-primary:hover, select.bg-primary:active {
+ background-image: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24' height='24' viewBox='0 0 24 24'><path fill='#fff' d='M7.406 7.828l4.594 4.594 4.594-4.594 1.406 1.406-6 6-6-6z'></path></svg>");
+ color: #fff;
+ }
input.right {
text-align: right;
}
color: #fff;
+}
+
+.card {
+margin: 10px;
}
\ No newline at end of file
<link rel="stylesheet" href="node_modules/bootstrap-table/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="css/cashbox.epic.css">
<link rel="stylesheet" href="css/app.css">
-<title>CASHBOX</title>
+<title>Invoice Journal</title>
</head>
<body>
<!--New Start-->
<div class="d-flex" id="wrapper">
- <div class="container">
- <div class="row " style="margin-top: 150px;">
- <div class="col-md-12 justify-content-center text-center">
- <img src="img/cashbox.png" style="width: 256px;"><br/><h1 class="text-white text-center" style="width: 100%">CashBox</h1>
- </div>
- <div class="col-md-2 justify-content-center text-center">
- <nav class="navbar navbar-expand-md navbar-dark bg-dark">
-
- <div class="text-center">
- <div class="btn-group" role="group" aria-label="Basic example">
-var browserapp = {
- <button class="btn btn-primary" onclick="browserapp.loadview('cashbox');"><i class="fas fa-plus"></i><br/>Kasse</button>
- <button class="btn btn-primary" onclick="browserapp.loadview('admin');"><i class="fas fa-edit"></i><br/>Verwaltung</button>
- </div>
- </div>
- </nav>
- </div>
- </div>
- </div>
- </div>
+
<!-- Sidebar -->
- <!-- <div class="bg-dark border-right" id="sidebar-wrapper">
- <div class="sidebar-heading"><a href="javascript:location.href='index.html';"><img src="img/cashbox.png" style="width: 140px;"><br/>Invoice Journal</a></div>
+ <div class="bg-dark border-right" id="sidebar-wrapper">
+ <div class="sidebar-heading"><a href="javascript:location.href='index.html';"><img src="img/cashbox.png" style="width: 140px;"><br/>CashBox</a></div>
<div class="list-group list-group-flush">
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('overview');">Übersicht</a>
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('invoices');">Rechnungen</a>
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('accounts');">Konten</a>
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('bankaccount');">Bankkonto</a>
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('offers');">Angebote</a>
+ <select class="form-control list-group-item list-group-item-action bg-primary text-white" id="globaldatasets" onchange="browserapp.loaddataset();">
+ </select>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('overview');">Übersicht</a>
<a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('products');">Produkte</a>
- <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('settings');">Einstellungen</a></li>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('clients');">Kunden</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('tables');">Tische</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('stations');">Geräte</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('transactions');">Transaktionen</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('sales');">Verkäufe</a>
+ <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('settings');">Einstellungen</a></li>
</div>
- </div> -->
+ </div>
<!-- /#sidebar-wrapper -->
<!-- Page Content -->
- <!-- <div id="page-content-wrapper">
+ <div id="page-content-wrapper">
<iframe id="moduleframe" src="modules/overview/index.html" style="width: 100%;height: 100vh; border: 0px;">
</iframe>
- </div> -->
+ </div>
<!-- /#page-content-wrapper -->
</div>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
-<script src="js/app.js"></script>
+<script src="js/mainapp.js"></script>
<script>if (window.module) module = window.module;</script>
<script src="renderer.js"></script>
</body>
+++ /dev/null
-
-// $("#menu-toggle").click(function(e) {
-// e.preventDefault();
-// $("#wrapper").toggleClass("toggled");
-// });
-
-$( document ).ready(function() {
- console.log( "Main ready!" );
- browserapp.loadmodule("overview");
- console.log("After module load!");
-});
-console.log(navigator.platform);
-console.log(location.protocol);
-var browserapp = {
-loadview: function(viewname){
- location.href= viewname + '.html';
-},
-loadmodule: function(modulename){
- var appdata = browserapp.getconfig();
- var params = "?";
- for (var i in appdata){
- params += "&" + i +"=" + encodeURIComponent(appdata[i]);
- }
- console.log("modules/"+modulename+"/index.html"+params);
- $("#moduleframe").attr("src","modules/"+modulename+"/index.html"+ params);
-},
-loadmodulepage: function(modulename,page,pageparams = null){
- var appdata = browserapp.getconfig();
- var params = "?";
- for (var i in appdata){
- params += "&" + i +"=" + encodeURIComponent(appdata[i]);
- }
- if (pageparams){
- for (var i in pageparams){
- params += "&" + i +"=" + encodeURIComponent(pageparams[i]);
- }
- }
- //console.log("modules/"+modulename+"/index.html"+params);
- $("#moduleframe").attr("src","modules/"+modulename+"/"+ page +".html"+ params);
-},
-getconfig:function (){
- return {dbfile:"invoicejournal",serviceurl:"http://localhost:6060/"};
-}
-}
\ No newline at end of file
--- /dev/null
+$( document ).ready(function() {
+ console.log( "Main ready!" );
+ browserapp.setdatasets();
+ browserapp.loaddataset();
+ browserapp.loadmodule("overview");
+ console.log("After module load!");
+});
+
+//console.log(navigator.platform);
+//console.log(location.protocol);
+var browserapp = {
+ config: null,
+ datasets: null,
+ loadmodule: function(modulename){
+ //var appdata = browserapp.getconfig();
+ var params = "?";
+ for (var i in this.config){
+ params += "&" + i +"=" + encodeURIComponent(this.config[i]);
+ }
+ //console.log("modules/"+modulename+"/index.html"+params);
+ $("#moduleframe").attr("src","modules/"+modulename+"/index.html"+ params);
+ },
+ loadmodulepage: function(modulename,page,pageparams = null){
+ //var appdata = browserapp.getconfig();
+ var params = "?";
+ for (var i in this.config){
+ params += "&" + i +"=" + encodeURIComponent(this.config[i]);
+ }
+ if (pageparams){
+ for (var i in pageparams){
+ params += "&" + i +"=" + encodeURIComponent(pageparams[i]);
+ }
+ }
+ //console.log("modules/"+modulename+"/index.html"+params);
+ $("#moduleframe").attr("src","modules/"+modulename+"/"+ page +".html"+ params);
+ },
+ setdatasets: function(myds){
+ $("#globaldatasets").html("");
+ var ds = usersystem.getLocalDataSets();
+ for (var i in ds){
+ var prop = usersystem.getPreference(ds[i]);
+ $("#globaldatasets").append('<option value="'+ds[i]+'">'+prop.name+'</option>');
+ }
+ },
+ currentdataset: function(){
+ return $("#globaldatasets :selected").val();
+ },
+ loaddataset: function(){
+ var gdset = $("#globaldatasets :selected").val();
+ if (gdset == ""){
+ this.config = null;
+ }else {
+ var ldata = usersystem.getPreference(gdset);
+ this.config={dbfile:ldata.dbfile,serviceurl:"http://"+ldata.server+":6060/"};
+ }
+ }
+
+}
\ No newline at end of file
mainWindow = new BrowserWindow({
show: false,
- frame: false,
+ // frame: false,
webPreferences: {
nodeIntegration: true
}
// 'printf("%.2f",CAST(sum(pos.quantity * pos.unitamount) + case when pos.taxpercent > 0 then sum(pos.taxpercent * pos.quantity * pos.unitamount) else 0.0 end AS real)) as totalamount, ' +
// 'printf("%.2f",COALESCE(ij.payedamount,0.0)) as payedamount, ' +
// 'ij.status ' +
- // 'from invoicejournal ij ' +
+ // 'from cashbox ij ' +
// 'left join invoicepositions pos on (ij.id=pos.id_invoice) ' +
// 'left join accounts rec on (ij.id_receipient = rec.id) ' +
// 'left join accounts sen on (ij.id_sender = sen.id) where ij.byear=' + cfg.byear +' group by pos.id_invoice order by date desc;';
}
function loadyears(){
- sql = "select byear from invoicejournal group by byear order by byear asc;";
+ sql = "select byear from cashbox group by byear order by byear asc;";
var data = appdb.dbquery(sql);
//onsole.log(data.sqldata);
for (var i in data.sqldata){
// 'printf("%.2f",CAST(sum(pos.quantity * pos.unitamount) + case when pos.taxpercent > 0 then sum(pos.taxpercent * pos.quantity * pos.unitamount) else 0.0 end AS real)) as totalamount, ' +
// 'printf("%.2f",COALESCE(ij.payedamount,0.0)) as payedamount, ' +
// 'ij.status ' +
- // 'from invoicejournal ij ' +
+ // 'from cashbox ij ' +
// 'left join invoicepositions pos on (ij.id=pos.id_invoice) ' +
// 'left join accounts rec on (ij.id_receipient = rec.id) ' +
// 'left join accounts sen on (ij.id_sender = sen.id) where ij.byear=' + cfg.byear +' group by pos.id_invoice order by date desc;';
--- /dev/null
+CREATE Table payementtypes (
+ id TEXT,
+ name TEXT,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_payementtypes_upd UPDATE ON payementtypes
+ BEGIN
+ UPDATE payementtypes SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+
+CREATE Table groups (
+ id TEXT,
+ name TEXT,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_groups_upd UPDATE ON groups
+ BEGIN
+ UPDATE groups SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+CREATE Table tables (
+ id TEXT,
+ name TEXT,
+ seats integer,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_tables_upd UPDATE ON tables
+ BEGIN
+ UPDATE tables SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+CREATE TABLE products (
+ id TEXT,
+ id_group TEXT,
+ name TEXT,
+ specification TEXT,
+ netamount REAL,
+ grossamount REAL,
+ vatpercent REAL,
+ visible BOOLEAN,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_products_upd UPDATE ON products
+ BEGIN
+ UPDATE products SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+CREATE TABLE transactions (
+ id TEXT,
+ id_payementtype TEXT,
+ id_client TEXT,
+ id_table TEXT,
+ id_product TEXT,
+ netamount REAL,
+ vatamount REAL,
+ grossamount REAL,
+ payedamount REAL,
+ cashbackamount REAL,
+ status TEXT,
+ statusdate DATE,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_transactions_upd UPDATE ON transactions
+ BEGIN
+ UPDATE transactions SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+CREATE TABLE transactiondata (
+ id TEXT,
+ id_transaction TEXT,
+ id_product TEXT,
+ id_client TEXT,
+ id_table TEXT,
+ netamount REAL,
+ vatamount REAL,
+ grossamount REAL,
+ quantity integer,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_transactiondata_upd UPDATE ON transactiondata
+ BEGIN
+ UPDATE transactiondata SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
+CREATE TABLE printtemplates (
+ id TEXT,
+ name TEXT,
+ templatedesign TEXT,
+ templatesql TEXT,
+ templatetype TEXT,
+ modified DATETIME defaults CURRENT_TIMESTAMP,
+ created DATETIME defaults CURRENT_TIMESTAMP,
+ primary key (id)
+);
+
+CREATE TRIGGER trg_printtemplates_upd UPDATE ON printtemplates
+ BEGIN
+ UPDATE printtemplates SET modified=CURRENT_TIMESTAMP WHERE id = NEW.id;
+ END;
+
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
+<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
+<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
+<link rel="stylesheet" href="../../css/app.css">
+<title>Datenbank-Einstellungen</title>
+</head>
+<body>
+ <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
+ <button class="btn btn-primary" onclick="parent.browserapp.loadmodule('settings');"><i class="fas fa-chevron-left"></i><br>Back</button>
+ <a class="navbar-brand" href="#"> Datenbank-Einstellungen</a>
+ <div class="ml-auto">
+
+ <div class="btn-group" role="group" aria-label="Basic example">
+ <button class="btn btn-primary" onclick="datastore.save();"><i class="fas fa-save"></i><br/>Speichern</button>
+ <button class="btn btn-primary" onclick="datastore.test();"><i class="fas fa-sync"></i><br/>Testen</button>
+ <button class="btn btn-danger" onclick="datastore.test();" id="btnconnection"><i class="fas fa-wifi"></i><br/>Verbinden</button>
+
+ </div>
+ </div>
+ </nav>
+ <div class="cotainer-fluid" style="margin-top: 52px;">
+ <ul class="nav nav-tabs" id="pagetab" role="tablist">
+ <li class="nav-item"><a aria-controls="global" aria-selected="true" class="nav-link active" data-toggle="tab" href="#global" id="global-tab" role="tab">Global</a></li>
+ <li class="nav-item"><a aria-controls="templates" aria-selected="false" class="nav-link" data-toggle="tab" href="#templates" id="templates-tab" role="tab">Vorlagen & Drucker</a></li>
+ </ul>
+ <div class="tab-content" id="tabpagecontent">
+ <div aria-labelledby="global-tab" class="tab-pane fade show active" id="global" role="tabpanel">
+ <div class="row">
+ <div class="col-md-12">
+ <div class="card">
+ <div class="card-body">
+ <div class="form-group">
+ <label for="name" >Name</label>
+ <input type="text" class="form-control" id="name" name="name"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-4">
+ <div class="card">
+ <div class="card-header"> Verbindung </div>
+ <div class="card-body">
+ <div class="form-group">
+ <label for="type">Verbindungs-Typ</label>
+ <select id="type" name="type" class="form-control">
+ <option value="local">Lokal</option>
+ <option value="local">LAN</option>
+ <option value="Cloud">Cloud</option>
+ </select>
+ </div>
+ <div class="form-group">
+ <label for="server">Server</label>
+ <input type="text" class="form-control" id="server" name="server"/>
+ </div>
+ <div class="form-group">
+ <label for="dbfile">Datenbank</label>
+ <input type="text" class="form-control" id="dbfile" name="dbfile"/>
+ </div>
+ <div class="form-group">
+ <label for="type">VPN</label>
+ <select id="vpn" name="vpn" class="form-control">
+ <option value=""></option>
+ </select>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-4">
+ <div class="card">
+ <div class="card-header">
+ Standard Werte
+ </div>
+ <div class="card-body">
+ <div class="form-group">
+ <label for="dbname">Mehrwert-Steuer(%)</label>
+ <input type="text" class="form-control" id="vat" name="vat"/>
+ </div>
+ <div class="form-group">
+ <label for="dbname">Währung (Symbol)</label>
+ <input type="text" class="form-control" id="currency" name="currency"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-4">
+ <div class="card">
+ <div class="card-header">
+ E-Mail Server
+ </div>
+ <div class="card-body">
+ <div class="form-group">
+ <label for="mailserver">Email-Server</label>
+ <input type="text" class="form-control" id="mailserver" name="mailserver"/>
+ </div>
+ <div class="form-group">
+ <label for="mailport">Verschlüsselung/Port</label>
+ <div class="input-group">
+ <select id="mailencryption" name="mailencryption" class="form-control">
+ <option value="">None</option>
+ <option value="TLS">TLS</option>
+ <option value="SSL">SSL</option>
+ </select>
+ <input type="text" class="form-control" id="mailport" name="mailport"/>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="maillogin">Login</label>
+ <input type="text" class="form-control" id="maillogin" name="maillogin"/>
+ </div>
+ <div class="form-group">
+ <label for="mailpassword">Passwort</label>
+ <input type="password" class="form-control" id="mailpassword" name="mailpassword"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div aria-labelledby="templates-tab" class="tab-pane fade" id="templates" role="tabpanel">
+ <div class="row">
+ <div class="col-md-6" style="padding-right: 0px;">
+ <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+ <h5 class="text-white">Druck-Vorlagen</h5>
+ <div class="ml-auto">
+
+ <div class="btn-group" role="group" aria-label="Basic example">
+ <button class="btn btn-primary" onclick="printtemplate.new();"><i class="fas fa-plus"></i><br/>Neu</button>
+ <button class="btn btn-primary" onclick="printtemplate.edit();"><i class="fas fa-edit"></i><br/>bearb.</button>
+ <button class="btn btn-primary" onclick="printtemplate.delete();" ><i class="fas fa-trash"></i><br/>Löschen</button>
+ <button class="btn btn-primary" onclick="printtemplate.duplicate();" ><i class="fas fa-copy"></i><br/>Copy</button>
+ </div>
+ </div>
+ </nav>
+
+
+ <table id="tbl_invoicetemplates" class="table table-bordered table-hover table-striped">
+ <thead class="thead-dark">
+ <th data-checkbox="true"></th>
+ <th data-sortable="true">Name</th>
+ <th data-sortable="true">Typ</th>
+ <th data-sortable="true">Standard</th>
+ <tfoot></tfoot>
+ <tbody></tbody>
+ </table>
+ </div>
+ <div class="col-md-6" >
+ <div class="card">
+ <div class="card-header">Drucker</div>
+ <div class="card-body">
+ <div class="form-group">
+ <label for="ticketprinter">Kassenzettel-Drucker</label>
+ <select id="ticketprinter" name="ticketprinter" class="form-control">
+ <option value=""></option>
+ </select>
+ <button class="btn btn-primary">Drucker-Einstellungen</button>
+ </div>
+ <div class="form-group">
+ <label for="a4printer">A4-Drucker</label>
+ <select id="a4printer" name="a4printer" class="form-control">
+ <option value=""></option>
+ </select>
+ <button class="btn btn-primary">Drucker-Einstellungen</button>
+ </div>
+ </div>
+ </div>
+
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
+<script src="../../node_modules/jquery/dist/jquery.min.js"></script>
+<script src="../../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+<script src="../../node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>
+<script src="../../node_modules/@fortawesome/fontawesome-free/js/all.min.js"></script>
+<script src="../../js/moduleglobal.js"></script>
+<script src="../../js/database.js"></script>
+<script src="form_datastore.js"></script>
+<script src="lib/datastore.js"></script>
+<script src="lib/printtemplate.js"></script>
+<script>if (window.module) module = window.module;</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+function initpage(){
+ console.log("ID:" + mpref.cfg.id);
+ if (mpref.cfg.id){
+ loadform();
+ }
+}
+
+function loadform(){
+ var pref = parent.usersystem.getPreference(mpref.cfg.id);
+ console.log(pref);
+ for (var i in pref){
+ $("#" + i).val(pref[i]);
+ }
+}
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
+<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
+<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
+<link rel="stylesheet" href="../../css/app.css">
+<title>Druck Template</title>
+</head>
+<body>
+ <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
+ <button class="btn btn-primary" onclick="parent.browserapp.loadmodule('settings');"><i class="fas fa-chevron-left"></i><br>Back</button>
+ <a class="navbar-brand" href="#">Druck-Vorlage</a>
+ <div class="ml-auto">
+ <div class="btn-group" role="group" aria-label="Basic example">
+ <button class="btn btn-primary" onclick="printtemplate.save();"><i class="fas fa-save"></i><br/>Speichern</button>
+ <button class="btn btn-primary" onclick="printtemplate.test();"><i class="fas fa-sync"></i><br/>Testen</button>
+
+ </div>
+ </div>
+ </nav>
+ <div class="cotainer-fluid" style="margin-top: 52px;">
+ <div class="row">
+ <input type="hidden" value="" id="id" name="id" />
+ <div class="col-md-6">
+ <div class="form-control">
+ <label for="name">Name</label>
+ <input type="text" class="form-control" id="name" name="name" />
+ </div>
+ </div>
+ <div class="col-md-6">
+ <div class="form-control">
+ <label for="name">Typ</label>
+ <select class="form-control" id="type" name="type" >
+ <option value="ticket">Ticket</option>
+ <option value="kassenbon">Kassenzettel</option>
+ <option value="a4template">A4-Vorlage</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-12">
+ <div class="form-control">
+ <label for="template">Vorlage</label>
+ <textarea id="template" name="template" class="form-control richtextedit"></textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+
+<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
+<script src="../../node_modules/jquery/dist/jquery.min.js"></script>
+<script src="../../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+<script src="../../node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>
+<script src="../../node_modules/@fortawesome/fontawesome-free/js/all.min.js"></script>
+<script src="../../js/moduleglobal.js"></script>
+<script src="../../js/database.js"></script>
+<script src="lib/printtemplate.js"></script>
+<script src="form_printtemplate.js"></script>
+<script>if (window.module) module = window.module;</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+function initpage(){
+ console.log(parent.usersystem.getsysinfo());
+ //parent.usersystem.setProperty("testproperty",{id:"TEST"});
+}
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
+<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
+<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
+<link rel="stylesheet" href="../../css/app.css">
+<title>Einstellungen</title>
+</head>
+<body>
+ <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
+ <a class="navbar-brand" href="#">Einstellungen</a>
+ <div class="ml-auto">
+ <div class="btn-group" role="group" aria-label="Basic example">
+ <button class="btn btn-primary" onclick="datastore.import();"><i class="fas fa-file-import"></i><br/>importieren</button>
+ <button class="btn btn-primary" onclick="datastore.export();"><i class="fas fa-file-export"></i><br/>exportieren</button>
+ <button class="btn btn-primary" onclick="datastore.new();"><i class="fas fa-plus"></i><br/>Neu</button>
+ <button class="btn btn-primary" onclick="datastore.edit();"><i class="fas fa-edit"></i><br/>Bearb.</button>
+ <button class="btn btn-primary" onclick="datastore.delete();"><i class="fas fa-trash"></i><br/>Löschen</button>
+
+ </div>
+ </div>
+ </nav>
+ <div class="cotainer-fluid" style="margin-top: 52px;">
+ <!-- <button class="btn btn-secondary" onclick="parent.usersystem.showError('MyError','My Error Message from settings!');">Show Error</button> -->
+ <table class="table table-bordered table-hover table-striped" id="tbl_datasets">
+ <thead class="thead-dark">
+ <tr>
+ <th data-checkbox="true"></th>
+ <th data-sortable="true">Name</th>
+ <th data-sortable="true">Database</th>
+ <th data-sortable="true">Server</th>
+ <th data-sortable="true">Type</th>
+ <th data-sortable="true">VPN</th>
+ <th>Verbunden</th>
+ </tr>
+ </thead>
+ <tfoot></tfoot>
+ <tbody></tbody>
+ </table>
+ </div>
+<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
+<script src="../../node_modules/jquery/dist/jquery.min.js"></script>
+<script src="../../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+<script src="../../node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>
+<script src="../../node_modules/@fortawesome/fontawesome-free/js/all.min.js"></script>
+<script src="../../js/moduleglobal.js"></script>
+<script src="../../js/database.js"></script>
+<script src="lib/datastore.js"></script>
+<script src="index.js"></script>
+<script>if (window.module) module = window.module;</script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+var winh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+var tblh = winh-54;
+
+function initpage(){
+ console.log(parent.usersystem.getsysinfo());
+ loadtable();
+ //parent.usersystem.setProperty("testproperty",{id:"TEST"});
+}
+
+function loadtable(){
+
+ var connected=parent.browserapp.currentdataset();
+
+ var localds = parent.usersystem.getLocalDataSets();
+ console.log(localds);
+ for (var i in localds){
+ var prop = parent.usersystem.getPreference(localds[i]);
+ console.log("PROP");
+ console.log(connected +"<=>"+ localds[i]);
+
+ console.log(prop);
+ var row = '<tr id="' + localds[i] + '">' +
+ '<td></td>' +
+ '<td>'+prop.name+'</td>' +
+ '<td>'+prop.dbfile+'</td>' +
+ '<td>'+prop.server+'</td>' +
+ '<td>'+prop.type+'</td>' +
+ '<td>'+prop.vpn+'</td>' +
+ '<td class="btn-'+ ((localds[i]==connected)?'success':'secondary')+'"></td>'+
+ '</tr>';
+ $("#tbl_datasets").append(row);
+
+ //$("#globaldatasets").append('<option value="'+ds[i]+'">'+prop.name+'</option>');
+ }
+ $('#tbl_datasets').bootstrapTable({
+ pagination: false,
+ search: false,
+ height: tblh,
+ clickToSelect: true
+ });
+}
+
+// function settings_edit(){
+// var settings_id= getTableSelectionID();
+// if (settings_id){
+// parent.browserapp.loadmodulepage('settings','form_datastore',{"id":settings_id});
+// }
+
+// }
+
+function getTableSelectionID(){
+ var sel = $('#tbl_datasets').bootstrapTable('getSelections');
+ var id = null;
+
+ if (sel){ id=sel[0]._id; }
+ console.log("Selected ID:" + id);
+ return id;
+ }
+
+ function getTableSelectionIDs(){
+ var sel = $('#tbl_datasets').bootstrapTable('getSelections');
+ var ids = [];
+ if (sel){
+ for (var s in sel){
+ ids.push(s._id);
+ }
+ }
+ return ids;
+ }
+
+
\ No newline at end of file
--- /dev/null
+var datastore = {
+ new: function(){
+ parent.browserapp.loadmodulepage('settings','form_datastore',{"id":""});
+ },
+ edit: function(){
+ var settings_id= getTableSelectionID();
+ console.log(settings_id);
+ if (settings_id){
+ parent.browserapp.loadmodulepage('settings','form_datastore',{"id":settings_id});
+ }
+ },
+ delete: function(){
+
+ },
+ import: function(){
+
+ },
+ export: function(){
+
+ },
+ test: function(){
+
+ },
+ save: function(){
+ var dts ={};
+ $("input,select").each(function(){
+ var inp = $(this);
+ //console.log(inp);
+ dts[inp.attr("id")] = inp.val();
+ });
+ console.log(dts);
+ console.log(mpref);
+ if (mpref.cfg.id == ""){
+ var keyname = dts['name'].toLowerCase();
+ console.log(keyname);
+ keyname = keyname.replace(/[^a-z0-9-_]/g,"");
+ console.log(keyname);
+ mpref.cfg.id = "db."+ keyname;
+ }
+ if (dts.name){
+ console.log("Before save:" + mpref.cfg.id);
+ parent.usersystem.setPreference(mpref.cfg.id,dts);
+ }
+
+ }
+}
\ No newline at end of file
--- /dev/null
+var printtemplate = {
+ new: function(){
+
+ },
+ edit: function(){
+
+ },
+ duplicate: function(){
+
+ },
+ delete: function(){
+
+ }
+}
<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
-<link rel="stylesheet" href="../../css/invoicejournal.epic.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
<link rel="stylesheet" href="../../css/app.css">
<title>Rechnungen</title>
</head>
'printf("%.2f",CAST(sum(pos.quantity * pos.unitamount) + case when pos.taxpercent > 0 then sum(pos.taxpercent * pos.quantity * pos.unitamount) else 0.0 end AS real)) as totalamount, ' +
'printf("%.2f",COALESCE(ij.payedamount,0.0)) as payedamount, ' +
'ij.status ' +
- 'from invoicejournal ij ' +
+ 'from cashbox ij ' +
'left join invoicepositions pos on (ij.id=pos.id_invoice) ' +
'left join accounts rec on (ij.id_receipient = rec.id) ' +
'left join accounts sen on (ij.id_sender = sen.id) where ij.byear=' + cfg.byear +' group by pos.id_invoice order by date desc;';
}
function loadyears(){
- sql = "select byear from invoicejournal group by byear order by byear asc;";
+ sql = "select byear from cashbox group by byear order by byear asc;";
var data = appdb.dbquery(sql);
//onsole.log(data.sqldata);
for (var i in data.sqldata){
<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
-<link rel="stylesheet" href="../../css/invoicejournal.epic.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
<link rel="stylesheet" href="../../css/app.css">
<title>Rechnungen</title>
</head>
'printf("%.2f",CAST(sum(pos.quantity * pos.unitamount) + case when pos.taxpercent > 0 then sum(pos.taxpercent * pos.quantity * pos.unitamount) else 0.0 end AS real)) as totalamount, ' +
'printf("%.2f",COALESCE(ij.payedamount,0.0)) as payedamount, ' +
'ij.status ' +
- 'from invoicejournal ij ' +
+ 'from cashbox ij ' +
'left join invoicepositions pos on (ij.id=pos.id_invoice) ' +
'left join accounts rec on (ij.id_receipient = rec.id) ' +
'left join accounts sen on (ij.id_sender = sen.id) where ij.byear=' + cfg.byear +' group by pos.id_invoice order by date desc;';
}
function loadyears(){
- sql = "select byear from invoicejournal group by byear order by byear asc;";
+ sql = "select byear from cashbox group by byear order by byear asc;";
var data = appdb.dbquery(sql);
//onsole.log(data.sqldata);
for (var i in data.sqldata){
<link rel="stylesheet" href="../../node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="../../node_modules/bootstrap-table/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/fontawesome.min.css">
-<link rel="stylesheet" href="../../css/invoicejournal.epic.css">
+<link rel="stylesheet" href="../../css/cashbox.epic.css">
<link rel="stylesheet" href="../../css/app.css">
<title>Rechnungen</title>
</head>
'printf("%.2f",CAST(sum(pos.quantity * pos.unitamount) + case when pos.taxpercent > 0 then sum(pos.taxpercent * pos.quantity * pos.unitamount) else 0.0 end AS real)) as totalamount, ' +
'printf("%.2f",COALESCE(ij.payedamount,0.0)) as payedamount, ' +
'ij.status ' +
- 'from invoicejournal ij ' +
+ 'from cashbox ij ' +
'left join invoicepositions pos on (ij.id=pos.id_invoice) ' +
'left join accounts rec on (ij.id_receipient = rec.id) ' +
'left join accounts sen on (ij.id_sender = sen.id) where ij.byear=' + cfg.byear +' group by pos.id_invoice order by date desc;';
}
function loadyears(){
- sql = "select byear from invoicejournal group by byear order by byear asc;";
+ sql = "select byear from cashbox group by byear order by byear asc;";
var data = appdb.dbquery(sql);
//onsole.log(data.sqldata);
for (var i in data.sqldata){
profilepath: function(){
var ppath="";
if (os.platform() == "darwin"){
- ppath = os.homedir() + '/Library/Application Support/invoicejournal/';
+ ppath = os.homedir() + '/Library/Application Support/cashbox/';
+ } else if (os.platform() == "Win32") {
+ ppath = os.homedir() + '/AppData/Roaming/cashbox/';
}
return ppath;
},
showError: function(errtitle,errmsg){
dialog.showErrorBox(errtitle, errmsg);
},
- setProperty(key,data){
-
-
+ setPreference: function(key,data){
+ //console.log("save preferences to: " + this.profilepath() + key + ".json");
if ((typeof data == 'object') || (typeof data == 'array')){
data = JSON.stringify(data);
}
- fs.writeFile(this.profilepath() + key + ".json", data, (err) => {
- if (err) {
- this.showError("Error writing Preference!",err.message);
- console.log(err);
- return false;
- }
- return true;
-
- });
- return false;
+ var result = fs.writeFileSync(this.profilepath() + key + ".json", data);
+ return result;
},
- getProperty(key){
+ getPreference: function(key){
var data = null;
- fs.readFile(this.profilepath() + key + ".json", 'utf-8', (err, data) => {
- if(err){
- this.showError("Error reading Preference!",err.message);
- return data;
- }
+ if (fs.existsSync(this.profilepath() + key + ".json")){
+ console.log("Read Key:" + key);
+ var data = fs.readFileSync(this.profilepath() + key + ".json", 'utf-8');
if (data.startsWith("{") || data.startsWith("[")){
data = JSON.parse(data);
}
- // Change how to handle the file content
- console.log("The file content is : " + data);
- return JSON.stringify(data);
- });
+ return data;
+ }
return data;
},
- getsysinfo(){
+ getLocalDataSets: function(){
+ var datasets =[];
+ var files = fs.readdirSync(this.profilepath());
+ files.forEach(function(file) {
+ if (file.match('db\..*\.json')){
+ datasets.push(file.replace('.json',''));
+ }
+ });
+ return datasets;
+ },
+ getsysinfo: function(){
return {
"hostname": os.hostname(),
"userdir": os.homedir(),