color: #fff;
+}
+
+.card {
+ margin: 10px;
}
\ No newline at end of file
<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
-
-// $("#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
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({
--- /dev/null
+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
--- /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/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="#"> 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
--- /dev/null
+function initpage(){
+ console.log("ID:" + mpref.cfg.id);
+ if (mpref.cfg.id){
+
+ }
+}
<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>
<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>
--- /dev/null
+{"name":"DKS Buchhaltung","type":"local","server":"","dbfile":"","vpn":"","vat":"","currency":"","mailserver":"","mailport":"","mailencryption":"","maillogin":"","mailpassword":""}
\ No newline at end of file
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;
},
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);
}
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(),