datastore events
authorKilian Saffran <ksaffran@dks.lu>
Thu, 21 Feb 2019 13:50:49 +0000 (14:50 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Thu, 21 Feb 2019 13:50:49 +0000 (14:50 +0100)
css/app.css
index.html
js/app.js
main.js
modules/settings/datastore.js [new file with mode: 0644]
modules/settings/form_datastore.html [new file with mode: 0644]
modules/settings/form_datastore.js [new file with mode: 0644]
modules/settings/index.html
null.json [new file with mode: 0644]
renderer.js

index d9b25df..d67f8b9 100644 (file)
@@ -62,4 +62,8 @@ input.right {
   color: #fff;
   
   
+}
+
+.card {
+  margin: 10px;
 }
\ No newline at end of file
index 770b3cf..60455e8 100644 (file)
@@ -18,6 +18,9 @@
             <div class="bg-dark border-right" id="sidebar-wrapper">
               <div class="sidebar-heading"><a href="javascript:location.href='index.html';"><img src="img/invoicejournal.png" style="width: 140px;"><br/>Invoice Journal</a></div>
               <div class="list-group list-group-flush">
+                    <select class="form-control list-group-item list-group-item-action" id="globaldatasets" onchange="browserapp.loaddataset();">
+                      <option></option>
+                    </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('invoices');">Rechnungen</a>
                     <a class="list-group-item list-group-item-action bg-light" href="javascript:browserapp.loadmodule('accounts');">Konten</a>
 
 <script src="js/app.js"></script>
 <script>if (window.module) module = window.module;</script>
-<<<<<<< HEAD
-
-=======
 <script src="renderer.js"></script>
->>>>>>> a9365519985ea97014e0a4cf9a311126d1151e59
 </body>
 </html>
\ No newline at end of file
index d534f87..8dcd62f 100644 (file)
--- a/js/app.js
+++ b/js/app.js
@@ -1,42 +1,50 @@
-
-// $("#menu-toggle").click(function(e) {
-//   e.preventDefault();
-//   $("#wrapper").toggleClass("toggled");
-// });
-
 $( document ).ready(function() {
   console.log( "Main ready!" );
   browserapp.loadmodule("overview");
+  browserapp.getdatasets();
   console.log("After module load!");
 });
 
 console.log(navigator.platform);
 console.log(location.protocol);
 var browserapp = {
-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]);
+  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 (){
+    var cdata = usersystem.getPreference("currentdataset");
+    if ((cdata) && (cdata.name)){
+
+    }
+    return {dbfile:"invoicejournal",serviceurl:"http://localhost:6060/"};
+  },
+  getdatasets(){
+    var ds = usersystem.getLocalDataSets();
+    for (var i in ds){
+      $("#globaldatasets").append('<option value="'+ds[i].key+'">'+ds[i].name+'</option>');
     }
+    
   }
-  //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
diff --git a/main.js b/main.js
index d3f65ea..40e1e4e 100644 (file)
--- a/main.js
+++ b/main.js
@@ -15,10 +15,10 @@ function createWindow () {
        var parameters = [];
         if (os.platform() == "win32"){
                executablePath = "C:\\Strawberry\\perl\\bin\\perl.exe";
-               parameters = ["C:\\Users\\ksaff\\Workspace\\DKSService\\dkslocalserver.pl"];
+               parameters = ["C:\\Users\\ksaff\\Workspace\\dks_server\\dkslocalserver.pl"];
         } else { //os.platform() == "darwin"
                executablePath = "/Users/kilian/perl5/perlbrew/perls/perl-5.28.1/bin/perl";
-               parameters = ["/Users/kilian/Workspace/DKSService/dkslocalserver.pl"];
+               parameters = ["/Users/kilian/Workspace/dks_server/dkslocalserver.pl"];
         }
 
   mainWindow = new BrowserWindow({
diff --git a/modules/settings/datastore.js b/modules/settings/datastore.js
new file mode 100644 (file)
index 0000000..22563c3
--- /dev/null
@@ -0,0 +1,45 @@
+var datastore = {
+    new: function(){
+        parent.browserapp.loadmodulepage('settings','form_datastore',{"id":""});
+    },
+    edit: function(name){
+        
+    },
+    load: function(name){
+
+    },
+    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
diff --git a/modules/settings/form_datastore.html b/modules/settings/form_datastore.html
new file mode 100644 (file)
index 0000000..417221e
--- /dev/null
@@ -0,0 +1,216 @@
+<!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/invoicejournal.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="#">&nbsp; 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; padding: 10px;">            
+      <div class="row justify-content-center">
+        <div class="col-md-12">
+          <div class="form-group row col-md-4">
+            <label for="name" class="col-sm-2">Name</label>
+            <div class="col-sm-10">
+                <input type="text" class="form-control" id="name" name="name"/>
+            </div>
+          </div>
+        </div>
+        <div class="col-md-4">
+          <div class="card">
+            <div class="card-header">
+              Verbindung
+            </div>
+            <div class="card-body">
+              <div class="form-group row">
+                <label for="type" class="col-sm-3">Verbindungs-Typ</label>
+                <div class="col-sm-3">
+                    <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>
+              <div class="form-group row">
+                <label for="serer" class="col-sm-3">Server</label>
+                  <div class="col-sm-8">
+                    <input type="text" class="form-control" id="server" name="server"/>
+                  </div>
+              </div>
+              <div class="form-group row">
+                <label for="dbfile" class="col-sm-3">Datenbank</label>
+                <div class="col-sm-8">
+                  <input type="text" class="form-control" id="dbfile" name="dbfile"/>
+                </div>
+              </div>
+                <div class="form-group row">
+                    <label for="type" class="col-sm-3">VPN</label>
+                    <div class="col-sm-8">
+                        <select id="vpn" name="vpn" class="form-control">
+                            <option value=""></option>
+                            <option value="vpn1">VPN 1</option>
+                          </select>
+                    </div>
+                  </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 row">
+                      <label for="dbname" class="col-sm-2">Mehrwert-Steuer(%)</label>
+                      <div class="col-sm-10">
+                        <input type="text" class="form-control" id="vat" name="vat"/>
+                      </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="dbname" class="col-sm-2">Währung (Symbol)</label>
+                        <div class="col-sm-10">
+                          <input type="text" class="form-control" id="currency" name="currency"/>
+                        </div>
+                      </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 row">
+                        <label for="mailserver" class="col-sm-2">Email-Server</label>
+                        <div class="col-sm-10">
+                          <input type="text" class="form-control" id="mailserver" name="mailserver"/>
+                        </div>
+                      </div>
+                      <div class="form-group row">
+                          <label for="mailport" class="col-sm-2">Port</label>
+                          <div class="col-sm-10">
+                            <input type="text" class="form-control" id="mailport" name="mailport"/>
+                          </div>
+                        </div>
+                        <div class="form-group row">
+                            <label for="mailencryption" class="col-sm-2">Verschlüsselung</label>
+                            <div class="col-sm-4">
+                                <select id="mailencryption" name="mailencryption" class="form-control">
+                                    <option value="">None</option>
+                                    <option value="TLS">TLS</option>
+                                    <option value="SSL">SSL</option>
+                                  </select>
+                            </div>
+                          </div>
+                          <div class="form-group row">
+                              <label for="maillogin" class="col-sm-2">Login</label>
+                              <div class="col-sm-10">
+                                <input type="text" class="form-control" id="maillogin" name="maillogin"/>
+                              </div>
+                            </div>
+                            <div class="form-group row">
+                                <label for="mailpassword" class="col-sm-2">Passwort</label>
+                                <div class="col-sm-10">
+                                  <input type="password" class="form-control" id="mailpassword" name="mailpassword"/>
+                                </div>
+                              </div>
+                </div>
+              </div>
+            </div>
+          <div class="col-md-6">
+              <div class="card">
+                <div class="card-header" style="padding: 0px; padding-left: 20px;">
+                    <nav class="navbar navbar-expand-md navbar-dark">
+                        Druck-Vorlagen
+                              <div class="ml-auto">
+                         
+                         <div class="btn-group" role="group" aria-label="Basic example">
+                              <button class="btn btn-default" onclick="printtemplate.new();"><i class="fas fa-plus"></i><br/>Neu</button>
+                              <button class="btn btn-default" onclick="printtemplate.edit();"><i class="fas fa-edit"></i><br/>bearb.</button>
+                              <button class="btn btn-default" onclick="printtemplate.delete();" ><i class="fas fa-trash"></i><br/>Löschen</button>
+                              <button class="btn btn-default" onclick="printtemplate.duplicate();" ><i class="fas fa-copy"></i><br/>Copy</button>
+                         </div>
+                              </div>
+                            </nav>
+                </div>
+                <div class="card-body" style="padding: 0px;">
+                    
+                    <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>
+            </div>
+            <div class="col-md-6">
+                <div class="card">
+                  <div class="card-header" style="padding: 0px; padding-left: 20px;">
+                      <nav class="navbar navbar-expand-md navbar-dark">
+                          Email-Vorlagen
+                                <div class="ml-auto">
+                           
+                           <div class="btn-group" role="group" aria-label="Basic example">
+                                <button class="btn btn-default" onclick="mailtemplate.new();"><i class="fas fa-plus"></i><br/>Neu</button>
+                                <button class="btn btn-default" onclick="mailtemplate.edit();"><i class="fas fa-edit"></i><br/>bearb.</button>
+                                <button class="btn btn-default" onclick="mailtemplate.delete();" ><i class="fas fa-trash"></i><br/>Löschen</button>
+                                <button class="btn btn-default" onclick="mailtemplate.duplicate();" ><i class="fas fa-copy"></i><br/>Copy</button>
+                           </div>
+                                </div>
+                              </nav>
+                  </div>
+                  <div class="card-body"  style="padding: 0px;">
+                      <table id="tbl_emailtemplates" 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">Versender</th>
+                                  <th data-sortable="true">Typ</th>
+                                  <th data-sortable="true">Standard</th>
+                          <tfoot></tfoot>
+                          <tbody></tbody>
+                      </table>
+                  </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="datastore.js"></script>
+<script>if (window.module) module = window.module;</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/modules/settings/form_datastore.js b/modules/settings/form_datastore.js
new file mode 100644 (file)
index 0000000..6bd237f
--- /dev/null
@@ -0,0 +1,6 @@
+function initpage(){
+    console.log("ID:" + mpref.cfg.id);
+    if (mpref.cfg.id){
+
+    }
+}
index 51a0078..78ecc38 100644 (file)
                 <a class="navbar-brand" href="#">Einstellungen</a>
                 <div class="ml-auto">
            <div class="btn-group" role="group" aria-label="Basic example">
-    
-    
-   </div>
+                <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>
+    <!-- <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_databases">
+        <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">Filepath</th>
+            <th data-sortable="true">Type</th>
+            <th data-sortable="true">VPN</th>
+            <th data-sortable="true">Verbunden</th>
+          </tr>
+        </thead>
+      </table>
     </div>
 <script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
 <script src="../../node_modules/jquery/dist/jquery.min.js"></script>
@@ -30,6 +48,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="datastore.js"></script>
 <script src="index.js"></script>
 <script>if (window.module) module = window.module;</script>
 </body>
diff --git a/null.json b/null.json
new file mode 100644 (file)
index 0000000..63032c3
--- /dev/null
+++ b/null.json
@@ -0,0 +1 @@
+{"name":"DKS Buchhaltung","type":"local","server":"","dbfile":"","vpn":"","vat":"","currency":"","mailserver":"","mailport":"","mailencryption":"","maillogin":"","mailpassword":""}
\ No newline at end of file
index 6076f0f..fb2acd1 100644 (file)
@@ -5,7 +5,9 @@ var usersystem = {
     profilepath: function(){
         var ppath="";
         if (os.platform() == "darwin"){
-         ppath = os.homedir() + '/Library/Application Support/invoicejournal/';
+            ppath = os.homedir() + '/Library/Application Support/invoicejournal/';
+        } else if (os.platform() == "Win32") {
+            ppath = os.homedir() + '/AppData/Roaming/invoicejournal/';
         }
         return ppath;
     },
@@ -27,9 +29,9 @@ var usersystem = {
     showError: function(errtitle,errmsg){
         dialog.showErrorBox(errtitle, errmsg);
     },
-    setProperty(key,data){
+    setPreference(key,data){
        
-        
+        console.log("save preferences to: " + this.profilepath()  + key + ".json");
         if ((typeof data == 'object') || (typeof data == 'array')){
             data = JSON.stringify(data);
         }
@@ -39,27 +41,56 @@ var usersystem = {
                 console.log(err);
                 return false;
             }
+            console.log("save preferences saved!");
             return true;
             
         });
         return false;
     },
-    getProperty(key){
+    getPreference(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 (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);
-        });
+        if (fs.existsSync(this.profilepath()  + key + ".json")){
+            fs.readFile(this.profilepath()  + key + ".json", 'utf-8', (err, data) => {
+                if(err){
+                    //this.showError("Error reading Preference!",err.message);
+                    console.log("Error reading Preference!" + err.message);
+                    return data;
+                }
+                if (data.startsWith("{") || data.startsWith("[")){
+                    data = JSON.parse(data);
+                }
+                // Change how to handle the file content
+                console.log("The preference content is : " + data);
+                return JSON.stringify(data);
+            });
+        }
         return data;
     },
+    getLocalDataSets(){
+        var datasets =[];
+        fs.readdir(this.profilepath(), function (err, files) {
+            //handling error
+            if (err) {
+                return console.log('Unable to scan directory: ' + err);
+            } 
+            
+            //listing all files using forEach
+            files.forEach(function (file) {
+                console.log(file); 
+                if (file.match('db\..*\.json')){
+                    var key = file.replace('.json','');
+                    var data = this.getPreference(file);
+                    if (data){
+                        datasets.push({"key":key,"name":data.name});
+                    }
+                }
+                
+                
+            });
+            return datasets;
+        });
+        return datasets;
+    },
     getsysinfo(){
         return {
             "hostname": os.hostname(),