products and accounts
authorKilian Saffran <ksaffran@dks.lu>
Thu, 11 Apr 2019 14:47:54 +0000 (16:47 +0200)
committerKilian Saffran <ksaffran@dks.lu>
Thu, 11 Apr 2019 14:47:54 +0000 (16:47 +0200)
21 files changed:
index.html
js/database.js
js/mainapp.js
js/moduleglobal.js
main.js
modules/accounts/form_account.html [deleted file]
modules/accounts/form_account.js [deleted file]
modules/accounts/index.html
modules/accounts/index.js
modules/accounts/lib/accounts.js
modules/paywindow/index.html
modules/paywindow/index.js
modules/products/index.html
modules/products/index.js
modules/products/lib/product.js
renderer.js
server/htdocs/index.html
server/htdocs/js/cashbox.js
server/htdocs/js/pagedata.js [new file with mode: 0644]
server/htdocs/js/print.js [new file with mode: 0644]
server/htdocs/receipt.html

index fc37cdc..666d27f 100644 (file)
                   <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('paywindow');">Kasse</a>
-                    <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('accounts');">Konten</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('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>
@@ -36,7 +35,7 @@
         
             <!-- Page Content -->
             <div id="page-content-wrapper">
-              <iframe id="moduleframe" src="modules/overview/index.html" style="width: 100%;height: 100vh; border: 0px;">
+              <iframe id="moduleframe" src="modules/paywindow/index.html" style="width: 100%;height: 100vh; border: 0px;">
               </iframe> 
             </div>
             <!-- /#page-content-wrapper -->
index ff1d391..b3f351c 100644 (file)
@@ -20,7 +20,7 @@ var appdb = {
                                                result=data.result;
                                        },
                                        error: function(data){
-                                               alert("Error:" + JSON.stringify(data));
+                                               //alert("Error:" + JSON.stringify(data));
                                                console.log("Error:" + JSON.stringify(data));
                                        },
                                async:false
@@ -43,7 +43,7 @@ var appdb = {
                                                result=data.result;
                                        },
                                        error: function(data){
-                                               alert("Error:" + JSON.stringify(data));
+                                               //alert("Error:" + JSON.stringify(data));
                                                console.log("Error:" + JSON.stringify(data));
                                        },
                                async:false
@@ -65,7 +65,7 @@ var appdb = {
                                                result=data.result;
                                        },
                                error: function(data){
-                                       alert("Error:" + JSON.stringify(data));
+                                       //alert("Error:" + JSON.stringify(data));
                                        console.log("Error:" + JSON.stringify(data));
                                },
                                async:false
@@ -87,7 +87,7 @@ var appdb = {
                                                result=data.result;
                                        },
                                        error: function(data){
-                                               alert("Error:" + JSON.stringify(data));
+                                               //alert("Error:" + JSON.stringify(data));
                                                console.log("Error:" + JSON.stringify(data));
                                        },
                                async:false
index bfa3bf7..5537825 100644 (file)
@@ -1,9 +1,9 @@
 $( document ).ready(function() {
-  console.log( "Main ready!" );
+  //console.log( "Main ready!" );
   browserapp.setdatasets();
   browserapp.loaddataset();
   browserapp.loadmodule("overview");
-  console.log("After module load!");
+  //console.log("After module load!");
 });
 
 //console.log(navigator.platform);
index 20b0b17..d99402d 100644 (file)
@@ -1,5 +1,5 @@
 $( document ).ready(function() {
-  console.log( "Iframe "+ location.pathname.substring(location.pathname.lastIndexOf("/")) +" ready!" );
+  //console.log( "Iframe "+ location.pathname.substring(location.pathname.lastIndexOf("/")) +" ready!" );
   mpref.loadconfig();
   initpage();
 });
@@ -9,12 +9,14 @@ var mpref ={
   getSearchParams: function (k){
     //alert(location.href);
     var p={};
-    console.log("params =>" + location.search);
+    //console.log("params =>" + location.search);
     location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v});
     return k?p[k]:p;
   },
   loadconfig: function(){
     this.cfg = this.getSearchParams();
+    //console.log("Module global config");
+    //console.log(this.cfg);
     //var page = location.pathname.substring(location.pathname.lastIndexOf("/"));
     //page = page.replace(/\.html/,'');
     //apppref.getpreference(page);
diff --git a/main.js b/main.js
index c813a67..2282997 100644 (file)
--- a/main.js
+++ b/main.js
@@ -56,7 +56,85 @@ function createWindow () {
   mainWindow.show()
   // Open the DevTools.
   mainWindow.webContents.openDevTools()
-  
+  mainWindow.webContents.on('new-window', (event, url, frameName, disposition, options, additionalFeatures) =>{
+    console.log("URL:" + url);
+    console.log("frameName:" + frameName);
+    console.log(options);
+    console.log(disposition);
+    if (frameName === 'receipt') {
+      event.preventDefault()
+      Object.assign(options,{
+        modal: true,
+        parent: mainWindow,
+        width: 320,
+        height: 400,
+        show: false
+      })
+      const win = new BrowserWindow(options)
+      win.setMenu(null)
+      win.once('ready-to-show', () => win.show())
+      win.loadURL(url)
+      if (url.indexOf("&action=print") > 0 ){
+          win.webContents.on('did-finish-load', () => {
+            win.webContents.print();
+          })
+      }
+      event.newGuest = win
+    }
+    else if (frameName === 'cardview') {
+      event.preventDefault()
+      Object.assign(options,{
+        modal: true,
+        parent: mainWindow,
+        width: 1040,
+        height: 600,
+        show: false
+      })
+      const win = new BrowserWindow(options)
+      win.setMenu(null)
+      win.once('ready-to-show', () => win.show())
+      win.loadURL(url)
+      win.webContents.on('new-window', (event2, url2, frameName2, disposition2, options2, additionalFeatures2) => {
+        console.log("SubWindow for print!");
+        console.log(url2);
+        console.log(frameName2);
+        event2.preventDefault()
+        Object.assign(options,{
+          modal: true,
+          parent: win,
+          width: 1040,
+          height: 600,
+          show: false
+        })
+        const win2 = new BrowserWindow(options)
+        win2.setMenu(null)
+        win2.loadURL(url2)
+        win2.webContents.on('did-finish-load', () => {
+          win2.webContents.print();
+        })
+        
+        //win2.print()
+        event.newGuest = win2
+      })
+      event.newGuest = win
+    } else {
+      event.preventDefault()
+      Object.assign(options,{
+        modal: true,
+        parent: mainWindow,
+        width: 1040,
+        height: 600,
+        show: false
+      })
+      const win = new BrowserWindow(options)
+      win.setMenu(null)
+      win.once('ready-to-show', () => win.print())
+      win.loadURL(url)
+      
+      event.newGuest = win
+    }
+  })
+
   // Emitted when the window is closed.
   mainWindow.on('closed', function () {
     // Dereference the window object, usually you would store windows
diff --git a/modules/accounts/form_account.html b/modules/accounts/form_account.html
deleted file mode 100644 (file)
index ba35738..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<!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>Konto</title>
-</head>
-<body>
-        <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
-                <a class="navbar-brand" href="#">Konto</a>
-                <div class="ml-auto">
-          <div class="btn-group" role="group" aria-label="Basic example">
-
-          </div>
-              </nav>
-    <div class="cotainer-fluid" style="margin-top: 52px;">            
-      <input type="hidden" value="" id="id" name="id" />         
-      <div class="row">
-        
-        <div class="col-md-4">
-          <div class="form-group">
-            <label for="name">Name</label>
-            <input type="text" class="form-control" id="name" name="name" />
-          </div>
-        </div>
-        <div class="col-md-2">
-            <div class="form-group">
-              <label for="name">Typ</label>
-              <select class="form-control" id="type" name="type" >
-                <option value="table">Tisch</option>
-                <option value="client">Kunde</option>
-                <option value="seat">Sitzplatz</option>
-                <option value="account">Konto</option>
-              </select>
-            </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="account.js"></script>
-<script>if (window.module) module = window.module;</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/modules/accounts/form_account.js b/modules/accounts/form_account.js
deleted file mode 100644 (file)
index 16a8163..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-var winh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
-var tblh = winh-54;
-
-function initpage(){
-  if (mpref.cfg.id){
-    getaccountdata(mpref.cfg.id);
-  } else {
-    //load default new invoice data
-  }
-  console.log("invoice ID:",mpref.cfg.id);
-}
-
-function getaccountdata(){
-  
-}
\ No newline at end of file
index 44cd7c1..2478e87 100644 (file)
                 <a class="navbar-brand" href="#">Kunden</a>
                 <div class="ml-auto">
            <div class="btn-group" role="group" aria-label="Basic example">
-    <button class="btn btn-primary" onclick="client_new();"><i class="fas fa-plus"></i><br/>New</button>
-    <button class="btn btn-primary" onclick="client_edit();"><i class="fas fa-edit"></i><br/>Edit</button>
-    <button class="btn btn-primary" onclick="client_delete();"><i class="fas fa-trash"></i><br/>Delete</button>
-    <button class="btn btn-primary" onclick="client_clone();"><i class="fas fa-clone"></i><br/>Dupl.</button>
+    <button class="btn btn-primary" onclick="account_new();"><i class="fas fa-plus"></i><br/>New</button>
+    <button class="btn btn-primary" onclick="account_edit();"><i class="fas fa-edit"></i><br/>Edit</button>
+    <button class="btn btn-primary" onclick="account_delete();"><i class="fas fa-trash"></i><br/>Delete</button>
     
                 </div>
               </nav>
@@ -26,6 +25,7 @@
     <table id="tbl_accounts" class="table table-bordered table-hover table-striped">
         <thead class="thead-dark"> 
                 <th data-checkbox="true"></th>
+                <th data-sortable="true" data-width="20"><i class="fas fa-cash-register"></i></th>
                 <th data-sortable="true">Name</th>
                 <th data-sortable="true">Typ</th>
                 <th data-sortable="true">Info</th>
@@ -34,6 +34,7 @@
         <tbody></tbody>
     </table>
     </div>
+    <div id="datalists" style="display: hidden;"><datalist id="accounttypes"></datalist></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>
@@ -41,6 +42,7 @@
 <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/accounts.js"></script>
 <script src="index.js"></script>
 <script>if (window.module) module = window.module;</script>
 </body>
index 91d8ade..1004456 100644 (file)
@@ -2,23 +2,24 @@ var winh = Math.max(document.documentElement.clientHeight, window.innerHeight ||
 var tblh = winh-54;
 
 function initpage(){
+  loaddatalist_accounttypes();
   loadtable();
 }
 
 function loadtable(){
-  var sql = 'SELECT id, name,type,prename,surname, address, zip, city, country, clientnumber, email, phone FROM accounts;'
+  var sql = 'SELECT id,name,type,visible,info FROM accounts;';
   var data = appdb.dbquery(sql);
-  // //console.log(data.sqldata);
+  console.log("load accounts table " + sql);
+  console.log(data.sqldata);
+  $('#tbl_accounts > tbody').html("");
   for (var i in data.sqldata){
-   var row = '<tr id="' +data.sqldata[i].id + '">'+
-   '<td></td>' +
-      '<td>'+ data.sqldata[i].name +'</td>' +
-      '<td>'+ data.sqldata[i].type +'</td>' +
-     '<td>'+ data.sqldata[i].prename + ' ' + data.sqldata[i].surname + '</td>' +
-    '<td>'+ data.sqldata[i].address + '<br/>' + data.sqldata[i].zip + ' ' + data.sqldata[i].city + '<br/>' + data.sqldata[i].country +'</td>' +
-     '<td>' + data.sqldata[i].phone+ '<br/>' + data.sqldata[i].email+ '</td>' +
-     '</tr>';
-     $("#tbl_accounts").append(row);
+    var row = '<tr id="' +data.sqldata[i].id + '"><td></td>'+
+    '<td><input type="checkbox" class="form-control" id="accounts-visible" name="accounts-visible"  onfocusout="account.savevalue(this);" value="'+data.sqldata[i].visible+ '" '+ ((data.sqldata[i].visible == '1')?"checked":'')+'/></td>' +
+    '<td><input type="text" class="form-control font-weight-bold" id="accounts-name" name="accounts-name" onfocusout="account.savevalue(this);" value="'+((data.sqldata[i].name != null)?data.sqldata[i].name:'')+'"/></td>' +
+    '<td><input type="text" class="form-control" list="accounttypes" id="accounts-type" name="accounts-type"  onfocusout="account.savevalue(this);" value="' + (( data.sqldata[i].type!= null)?data.sqldata[i].type:'')+ '"/></td>' +
+    '<td><textarea rows="3" class="form-control" id="accounts-info" name="accounts-info"  onfocusout="account.savevalue(this);" >' + (( data.sqldata[i].info!= null)?data.sqldata[i].info:'')+ '</textarea></td>' +
+    '</tr>';
+    $("#tbl_accounts").append(row);
   }
   $('#tbl_accounts').bootstrapTable({
     pagination: false,
@@ -30,22 +31,35 @@ function loadtable(){
   
 }
 
-
-
-function account_edit(){
-  var cl_id= getTableSelectionID();
-  if (cl_id){
-    parent.browserapp.loadmodulepage('accounts','account',{"id":cl_id});
-  }
-  
+function account_new(){
+  var accid = account.new();
+  var row = '<tr id="'+accid+'"><td></td>'+
+  '<td><input type="checkbox" class="form-control" id="accounts-visible" name="accounts-visible"  onfocusout="account.savevalue(this);" value=""/></td>' +
+  '<td><input type="text" class="form-control font-weight-bold" id="accounts-name" name="accounts-name" onfocusout="account.savevalue(this);" value=""/></td>' +
+  '<td><input type="text" class="form-control" list="accounttypes" id="accounts-type" name="accounts-type"  onfocusout="account.savevalue(this);" value=""/></td>' +
+  '<td><textarea rows="3" class="form-control" id="accounts-info" name="accounts-info"  onfocusout="account.savevalue(this);" ></textarea></td>' +
+    '</tr>';
+    $("#tbl_accounts").prepend(row);
 }
 
-function delete_delete(){
-  
+function account_delete(){
+  var ret = parent.usersystem.showMessage("Bestätigung erforderlich","Ausgewählte Konten löschen?",null,"question",msgButtons=["JA","NEIN"],0,1);
+  console.log("Delete return:" + ret);
+  if (ret == 0){
+    //delete 
+    var ids= getTableSelectionIDs();
+    console.log(ids);
+    account.delete(ids);
+    loadtable();
+  }
 }
 
-function account_duplicate(){
-  
+function loaddatalist_accounttypes(){
+  var sql = "select type from accounts where type is not null group by type;";
+  var data = appdb.dbquery(sql);
+  for (var i in data.sqldata){
+    $("#accounttypes").append('<option value="'+ data.sqldata[i].type +'">');
+  }
 }
 
 
index beab1ab..7c97f48 100644 (file)
@@ -1,14 +1,44 @@
+
 var account = {
-  new: function(){
-    parent.browserapp.loadmodulepage('accounts','form_account',{"id":""});
+  savevalue: function(obj){
+    console.log(obj.type);
+    var savevalue= mpref.formatvalue(obj.value);
+    if (obj.type == "checkbox"){
+      if (obj.checked){
+        savevalue='1';
+      } else {
+        savevalue=null;
+      }
+    }
+    if (savevalue==null){
+      savevalue='null';
+    }else {
+      savevalue="'"+ savevalue+"'";
+    }
+    var ds = obj.id.split("-");
+    var sql = "update " + ds[0]+" set "+ds[1]+ "="+savevalue+" where id='"+obj.parentNode.parentNode.id+"';";
+    console.log(sql);
+    appdb.dbexec(sql);
+  },
+  import: function(){
+
   },
-  edit: function(id){
-    parent.browserapp.loadmodulepage('accounts','form_account',{"id":id});
+  export: function(){
+
   },
-  duplicate: function(id){
-    
+  new: function(){
+    var accid = appdb.generate_uuid;
+    appdb.dbexec("insert into accounts (id) VALUES ('"+ accid+"');");
+    return accid;
   },
-  delete: function(id){
-    
+  delete: function(ids){
+      var sql="DELETE FROM accounts WHERE id in ('"+ ids.join("','")+"')";
+      appdb.dbexec(sql);
   }
+  // duplicate: function(ids){
+  //     for (var i in ids){
+  //       var sql = "INSERT into products (id,name,specification,netamount,grossamount,vatpercent,productgroup) SELECT '"+ appdb.generate_uuid()+"' as id, name, specification, netamount, grossamount, vatpercent,productgroup FROM products where id = '"+ i +"';";
+  //       appdb.dbexec(sql);
+  //     }
+  // }
 }
\ No newline at end of file
index cc57875..5cbe7e6 100644 (file)
@@ -21,6 +21,7 @@
       <div class="btn-group" role="group" aria-label="Basic example">
           <button class="btn btn-primary" onclick="loadadmin();"><i class="fas fa-toolbox"></i><br/>Verwaltung</button>
           <button class="btn btn-primary" onclick="view_unpayedshoppingcarts();"><i class="fas fa-cash-register"></i><br/>Bestellungen</button>
+          <button class="btn btn-primary" onclick="cardwindow();"><i class="fas fa-credit-card"></i><br/>SumUp</button>
     </div>
   </div>
 </nav>
           </div>
           <div class="row"  style="margin: 0px;">
               <div class="col-sm-8" style="background-color: white; font-weight: bold; font-size: 30px; padding-top: 3px; padding-right: 5px;">
-               <i class="fas fa-map-marker-alt"></i> <span id="commandtable"></span>
+               <i class="fas fa-map-marker-alt"></i> <span id="account"></span>
               </div>
               <div class="col-sm-4">
-                  <button class="btn btn-primary btn-block" onclick="view_tables();"><i class="fas fa-map-marker-alt"></i><br>auswählen</button>
+                  <button class="btn btn-primary btn-block" onclick="view_accounts();"><i class="fas fa-map-marker-alt"></i><br>auswählen</button>
               </div>
           </div>
           <div class="row"  style="margin: 0px;">
-              <div class="col-sm-12" style="background-color: black; font-weight: bold; text-align: right; border: 1px solid green;; height: 40px; font-size: 30px; color: green; vertical-align: middle; padding-right: 5px;">
+              <div class="col-sm-12" style="background-color: black; font-weight: bold; text-align: right; border: 1px solid green; height: 40px; font-size: 30px; color: green; vertical-align: middle; padding-right: 5px;">
                 <span id="sumtotal">0,00</span>€
               </div>
           </div>
          
               <div class="row"  style="margin: 0px;">
                   <div class="col-sm-6 bg-primary text-white" style=" font-weight: bold; font-size: 30px; padding-top: 3px; padding-right: 5px;">
-                   <i class="fas fa-map-marker-alt white"></i> <span id="pay_commandtable"></span>
+                   <i class="fas fa-map-marker-alt white"></i> <span id="pay_account"></span>
                   </div>
                   <div class="btn-group btn-group-toggle col-sm-6" data-toggle="buttons">
                       <label class="btn btn-secondary btn-block" style="font-size: 20px;"> 
         </div>
         <div class="modal-footer">
           <button type="button" class="btn btn-secondary" data-dismiss="modal">Abrechen</button>
-          <button type="button" class="btn btn-secondary" onclick="book_shoppingcard">Buchen</button>
+          <button type="button" class="btn btn-secondary" onclick="save_shoppingcard();">Buchen</button>
         </div>
       </div>
     </div>
index 9c8eef1..1676590 100644 (file)
@@ -1,9 +1,13 @@
 var winh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
 var config = {}; 
 var localconfig = {};
+var mainconfig = {};
 var shoppingcart = {products:{},transaction:{}};
 var tblheight1=winh-180;
 function initpage(){
+  //console.log("INIT PAGE paywindow");
+  //mpref.loadconfig();
+  //console.log(mpref.cfg);
   loadconfig();
   load_group_selects();
   //load_local_config_product_tables();
@@ -11,6 +15,7 @@ function initpage(){
     height: tblheight1,
   });
   $('#checkout > tbody').html("");
+  
 }
 
 function loadconfig(){
@@ -20,8 +25,8 @@ function loadconfig(){
   if (dataconfig != null){
     config = dataconfig.sqldata;
   }
-  console.log("config loaded");
-  console.log(config);
+  //console.log("config loaded");
+  //console.log(config);
   localconfig = parent.usersystem.getPreference('paywindow');
   
 }
@@ -35,7 +40,11 @@ function loadadmin(){
 // }
 
 function printpreview(){
+  window.open(decodeURIComponent(mpref.cfg.serviceurl)+ "receipt.html","receipt");
+}
+
+function cardwindow(){
+  window.open('https://me.sumup.com/de-lu/transactionsnew',"cardview");
 }
 
 function load_group_selects(){
@@ -68,7 +77,7 @@ function load_group_selects(){
 
 function load_productgroup(listnum){
   var listval = $("#grouplist" + listnum + " :selected").val();
-  console.log(listval);
+  //console.log(listval);
   $('#producttable' + listnum + " > tbody").html("");
   var sql ="select id,name,specification,replace(printf(\"%.2f\",grossamount),'.',',') as grossamount from products where productgroup='"+appdb.secvalue(listval)+"';";
   var products = appdb.dbquery(sql);
@@ -83,10 +92,10 @@ function load_productgroup(listnum){
 }
 
 function addproduct(idproduct){
-  console.log(idproduct);
+  //console.log(idproduct);
   
   var sql = "select id,name,specification,grossamount,netamount,vatpercent,replace(printf(\"%.2f\",grossamount),'.',',') as dsp_grossamount from products where id='"+idproduct+"';";
-  console.log(sql);
+  //console.log(sql);
   var product = appdb.dbquery(sql);
   var trow = "";
   var bdone = false;
@@ -126,14 +135,14 @@ function addproduct(idproduct){
 }
 
 function remove_co_product(id){
-  console.log("remove id: "+ id);
+  //console.log("remove id: "+ id);
   $("table#checkout > tbody tr#checkout_"+id).remove();
   delete shoppingcart['products'][id];
   calctotal();
 }
 
 function calctotal(){
-  console.log(shoppingcart);
+  //console.log(shoppingcart);
   var sum = 0.00;
   for (var i in shoppingcart["products"]){
     sum += shoppingcart["products"][i].quantity * parseFloat(shoppingcart["products"][i].grossamount);
@@ -154,19 +163,15 @@ function view_unpayedshoppingcarts(){
 }
 
 function save_shoppingcart(){
-  
-}
-
-function view_payementdlg(ptype){
-  
+  printpreview();
 }
 
 function book_shoppingcart(ptype){
   shoppingcart['transaction']['id']= appdb.generate_uuid();
   if (shoppingcart['transaction']['table'] && shoppingcart['transaction']['table']['name']){
-    $("#pay_commandtable").html(shoppingcart['transaction']['table']['name']);
+    $("#pay_account").html(shoppingcart['transaction']['table']['name']);
   } else {
-    $("#pay_commandtable").html("");
+    $("#pay_account").html("");
   }
   if (shoppingcart['transaction']['grossamount']){
     $("#pay_sumtotal").html(shoppingcart['transaction']['grossamount'].toFixed(2).replace('.',','));
@@ -195,7 +200,7 @@ function book_shoppingcart(ptype){
 }
 
 function setprinttype(id){
-  console.log("set printtypes");
+  //console.log("set printtypes");
   if (!localsystem['printtype']){
     localsystem['printtype'] = {};
   }
@@ -207,18 +212,18 @@ function setprinttype(id){
   parent.usersystem.setPreference('paywindow',localconfig);
 }
 
-function view_tables(){
-  var tbls = appdb.dbquery("select id,name from tables;");
+function view_accounts(){
+  var tbls = appdb.dbquery("select id,name from accounts where visible='1' and name is not null;");
   $("#tableslist").html("");
   console.log(tbls);
   for (var i in tbls.sqldata){
-    $("#tableslist").append('<button class="btn btn-secondary" onclick="setTable(\''+tbls.sqldata[i].id+'\',\''+tbls.sqldata[i].name+'\');">'+tbls.sqldata[i].name+'</button>');
+    $("#tableslist").append('<button class="btn btn-secondary" style="margin: 1px solid #fff;" onclick="set_account(\''+tbls.sqldata[i].id+'\',\''+tbls.sqldata[i].name+'\');">'+tbls.sqldata[i].name+'</button>');
   }
   $('#dlgTables').modal('show');
 }
 
-function setTable(id,name){
-  $("#commandtable").html(name);
+function set_account(id,name){
+  $("#account").html(name);
   if (!shoppingcart['transaction']['table']){
     shoppingcart['transaction']['table'] ={};
   }
@@ -228,7 +233,7 @@ function setTable(id,name){
 }
 
 function setpayementtype(ptype){
-  console.log("set payement type: " + ptype);
+  //console.log("set payement type: " + ptype);
   if ($("#"+id).prop('checked')){
    shoppingcart['transaction']['payementtype'] =ptype;
   }
index 9ddaea9..a887ac4 100644 (file)
@@ -8,7 +8,7 @@
 <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>Kunden</title>
+<title>Produkte</title>
 </head>
 <body>
         <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
@@ -18,7 +18,7 @@
     <button class="btn btn-primary" onclick="product_new();"><i class="fas fa-plus"></i><br/>New</button>
     <button class="btn btn-primary" onclick="product_edit();"><i class="fas fa-edit"></i><br/>Edit</button>
     <button class="btn btn-primary" onclick="product_delete();"><i class="fas fa-trash"></i><br/>Delete</button>
-    <button class="btn btn-primary" onclick="invoice_clone();"><i class="fas fa-clone"></i><br/>Dupl.</button>
+    <button class="btn btn-primary" onclick="product_duplicate();"><i class="fas fa-clone"></i><br/>Dupl.</button>
     
                 </div>
               </nav>
@@ -45,7 +45,6 @@
 <script src="../../js/moduleglobal.js"></script>
 <script src="../../js/database.js"></script>
 <script src="lib/product.js"></script>
-
 <script src="index.js"></script>
 <script>if (window.module) module = window.module;</script>
 </body>
index 02e802b..0ced1c5 100644 (file)
@@ -53,7 +53,8 @@ function loadtable(){
 }
 
 function product_new (){
-  var row = '<tr id=""><td></td>'+
+  var prid = products.new();
+  var row = '<tr id="'+ prid+'"><td></td>'+
     '<td><input type="checkbox" class="form-control" id="visible" name="visible" value="1"/></td>' +
     '<td><input type="text" class="form-control" value=""/><br><input class="form-control" type="text" value="" /></td>' +
     '<td><input type="text" class="form-control" list="productgroup" value=""/></td>' +
@@ -79,7 +80,7 @@ function product_delete(){
 function product_duplicate(){
   var ids= getTableSelectionIDs();
   console.log(ids);
-  //product.duplicate(ids);
+  product.duplicate(ids);
   loadtable();
 }
 
index 798d63d..216274a 100644 (file)
@@ -29,6 +29,11 @@ var product = {
       var sql="DELETE FROM products WHERE id in ('"+ ids.join("','")+"')";
       appdb.dbexec(sql);
   },
+  new: function(){
+    var prid = appdb.generate_uuid;
+    appdb.dbexec("insert into products (id) VALUES ('"+ prid+"');");
+    return prid;
+  },
   duplicate: function(ids){
       for (var i in ids){
         var sql = "INSERT into products (id,name,specification,netamount,grossamount,vatpercent,productgroup) SELECT '"+ appdb.generate_uuid()+"' as id, name, specification, netamount, grossamount, vatpercent,productgroup FROM products where id = '"+ i +"';";
index 866763e..d9faa7e 100644 (file)
@@ -4,8 +4,8 @@ const os = require('os');
 var usersystem = {
     profilepath: function(){
         var ppath="";
-        console.log(os.platform());
-        console.log(os.homedir());
+        //console.log(os.platform());
+        //console.log(os.homedir());
         if (os.platform() == "darwin"){
             ppath = os.homedir() + '/Library/Application Support/cashbox/';
         } else if (os.platform() == "win32") {
@@ -42,7 +42,7 @@ var usersystem = {
     getPreference: function(key){
         var data = null;
         if (fs.existsSync(this.profilepath()  + key + ".json")){
-            console.log("Read Key:" + key);
+            //console.log("Read Key:" + key);
             var data = fs.readFileSync(this.profilepath()  + key + ".json", 'utf-8');
             if (data.startsWith("{") || data.startsWith("[")){
                 data = JSON.parse(data);
@@ -53,7 +53,7 @@ var usersystem = {
     },
     getLocalDataSets: function(){
         var datasets =[];
-        console.log(this.profilepath());
+       //console.log(this.profilepath());
         var files = fs.readdirSync(this.profilepath());
         files.forEach(function(file) {
             if (file.match('db\..*\.json')){
index 83f2033..cbba54a 100644 (file)
@@ -93,7 +93,7 @@
         <table class="table table-striped" data-toggle="table" style="width: 100%;">
           <thead>
             <tr>
-              <th colspan="4" id="head_commandtable">Table 1</th>
+              <th colspan="4" id="head_account">Table 1</th>
             </tr>
             <tr>
               <th data-sortable="true">Qu.</th>
index 0193078..874fb9d 100644 (file)
@@ -58,7 +58,7 @@ function getpnlproductsdata(){
 }
 
 function getpnlcommandsdata(){
-  $("#head_commandtable").html(cdata.table.name);
+  $("#head_account").html(cdata.table.name);
   var commands = appdb.dbquery("select id,modified,status,payedamount,grossamount from transactions where id_table='"+cdata.table.nid+"'");
 }
 
diff --git a/server/htdocs/js/pagedata.js b/server/htdocs/js/pagedata.js
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/server/htdocs/js/print.js b/server/htdocs/js/print.js
new file mode 100644 (file)
index 0000000..9c3d168
--- /dev/null
@@ -0,0 +1,20 @@
+var printconfig = {}
+$( document ).ready(function() {
+  //we need: databasename and transactionid
+  print.cfg = getSearchParams();
+});
+
+var print = {
+  cfg: null,
+  getSearchParams: function (k){
+    //alert(location.href);
+    var p={};
+    console.log("params =>" + location.search);
+    location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v});
+    return k?p[k]:p;
+  },
+  print: function(){
+    window.print();
+  }
+}
+
index 6a00253..864b46e 100644 (file)
@@ -88,7 +88,9 @@
       <span id="creationdate">DD.MM.YYYY HH:MM</span><br/>
       <span id="tranactionid">550e8400-e29b-11d4-a716-446655440000</span></p>
   </section>
-
+<script src="js/pagedata.js"></script>
+<script src="js/webdatabase.js"></script>
+<script src="js/print.js"></script>
 </body>
-
+  
 </html>
\ No newline at end of file