use Template;
# use Template::Constants qw( :debug );
use CGI;
-#use CGI::Carp qw(fatalsToBrowser);
+use CGI::Carp qw(fatalsToBrowser);
use CGI::Cookie;
use Data::Dumper;
use JSON::PP;
--- /dev/null
+<img src="[% abspath %][% staticpath %]img/package.svg" style="width: 64px;"><br/>HourTrax
\ No newline at end of file
--- /dev/null
+<!doctype html>\r
+<html lang="en">\r
+ <head>\r
+ <meta charset="utf-8">\r
+ <meta name="viewport" content="width=device-width, initial-scale=1">\r
+ <meta name="description" content="">\r
+ <meta name="author" content="">\r
+ <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />\r
+ <meta http-equiv="Pragma" content="no-cache" />\r
+ <meta http-equiv="Expires" content="0" />\r
+ <!--<link rel="icon" href="../img/favicon/creorga.png">-->\r
+\r
+ <title>Creorga </title>\r
+\r
+ <link href="../vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">\r
+ <link href="../css/main.css" rel="stylesheet">\r
+ </head>\r
+\r
+ <body oncontextmenu="return false;">\r
+\r
+ <nav class="navbar navbar-dark bg-dark fixed-top justify-content-between flex-nowrap flex-row">\r
+\r
+ <div class="mr-auto">\r
+ <div class="btn-group" role="group" aria-label="Main">\r
+ <button class="btn btn-default" id="mnubtn_childs" onclick="app.loadpage('modules/childs/index.html');"><img src="../img/modules/Children.svg" style="width: 32px; height: 32px;"/><br/>Enfants</button>\r
+ <div class="btn-group" role="group">\r
+ <button type="button" id="mnubtn_presences" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
+ <img src="../img/modules/Check.svg" style="width: 32px; height: 32px;"/><br/>Présences\r
+ </button>\r
+ <div class="dropdown-menu" aria-labelledby="mnubtn_presences">\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/presences/dailypresences.html');">Présences par jour</a>\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/presences/weeklypresences.html');">Présences par Semaine</a>\r
+ </div>\r
+ </div>\r
+ <div class="btn-group" role="group">\r
+ <button type="button" id="mnubtn_calendar" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
+ <img src="../img/modules/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendriers\r
+ </button>\r
+ <div class="dropdown-menu" aria-labelledby="mnubtn_calendar">\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/index.html');">Calendrier des Enfants</a>\r
+ [% IF creorga.modules.staff.planning %]\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/calorganisation.html');">Calendrier du Staff</a>\r
+ [% END %]\r
+ [% IF creorga.modules.staff.vacancy %]\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/calvacancy.html');">Calendrier des Congés</a>\r
+ [% END %]\r
+ </div>\r
+ </div>\r
+\r
+ [% IF creorga.modules.staff.menu %]\r
+ <button class="btn btn-default" id="mnubtn_stafflist" onclick="app.loadpage('modules/staff/stafflist.html');" ><img src="../img/modules/Team.svg" style="width: 32px; height: 32px; "/><br/>Employé(e)s</button>\r
+ [% END %]\r
+ </div>\r
+ </div>\r
+\r
+ <div class="ml-auto">\r
+ <div class="btn-group" role="group" aria-label="Right">\r
+ <div class="btn-group">\r
+ [% IF creorga.modules.creche.menu %]\r
+ <button type="button" class="btn btn-default" id="mnubtn_creche" onclick="app.loadpage('modules/creche/creche.html');"><img src="../img/modules/Home.svg" style="width: 32px; height: 32px;"/><br/>Crèche</button>\r
+ [% END %]\r
+ <select id="crechelist" class="btn btn-default" class="form-control" onchange="app.changesite();">\r
+\r
+ </select>\r
+ \r
+</div>\r
+ </div>\r
+ \r
+ </div>\r
+\r
+ \r
+ </nav>\r
+\r
+ <main role="main" class="container-fluid">\r
+\r
+ <iframe src="modules/childs/index.html" id="appframe" style="width: 100%; height: calc(100vh - 90px); margin: 0px; padding: 0px;"></iframe>\r
+\r
+ </main>\r
+\r
+\r
+ <script src="../vendor/jquery/jquery.min.js"></script>\r
+ <script src="../vendor/bootstrap/js/bootstrap.bundle.min.js"></script>\r
+ <script src="../js/app.js"></script>\r
+ <script src="../js/webpreferences.js" type="text/javascript"></script>\r
+ <script src="../js/webdatabase.js" type="text/javascript"></script>\r
+ \r
+\r
+ </body>\r
+</html>\r
<a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/invoicejournal/index.html','Journal');">Journal</a>
<a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/sales/index.html','Verkäufe');">Buchungen</a>
<!-- <a href="javascript:admin.loadpage('module/invoices/index.html','Rechnungs-Erstellung');" class="w3-bar-item w3-button">Rechnungs-Erstellung</a> -->
- <a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/accounts/index.html','Adressen');"><i class="icon-Adress_book_02"></i> Addressen</a>
+ <a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/accounts/index.html','Adressen');">Addressen</a>
<a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/bankaccount/index.html','Bankkonto');">Bankkonto</a>
<!-- <a href="javascript:admin.loadpage('module/documents/index.html','Dokumente');" class="w3-bar-item w3-button">Dokumente</a> -->
<a class="w3-bar-item w3-button w3-padding w3-border-bottom" href="javascript:admin.loadpage('module/offers/index.html','Angebote');">Angebote</a>
inittable: function(){
accounts.tbl = new Tabulator("#tbl_" + accounts.name, {
headerFilterPlaceholder:"filter...",
- height: "100vh",
+ height: "92vh",
layout:"fitDataFill",
selectable:1,
- responsiveLayout:"collapse",
columns:[
{title:"K.Nr", field:"ident",headerFilter:"input"},
- {title:"Name", field:"company",headerFilter:"input"},
+ {title:"Name", field:"receipient",headerFilter:"input"},
{title:"E-Mail", field:"email",headerFilter:"input"},
{title:"Tel", field:"phone",headerFilter:"input"},
- {title:"Addresse", field:"address",headerFilter:"input"},
+ {title:"Addresse", field:"address",formatter:"textarea",headerFilter:"input"},
+ {title:"Typ", field:"types",formatter:"textarea",headerFilter:"input"},
],
});
accounts.gettbldata();
},
gettbldata: function(){
- req.reqdata("POST","db.cgi",{"db":mpref.cfg.db,"type":"array","sql":"SELECT id, company, prename,surname, address, zip, city, country, email, phone, mobile, ident FROM accounts;"},accounts.loadtbldata);
+ req.reqdata("POST","db.cgi",{"db":parent.app + "/" + mpref.cfg.db,"get":"accountslist",},accounts.loadtbldata);
},
loadtbldata: function(data){
if (data && data.sqldata){
accounts.tbl.setData(data.sqldata);
}
},
+ viewtable: function(){
+ accounts.gettbldata();
+ module.viewpanel('tbl_accounts');
+ },
add: function(){
},
-var tbl = null;
-function initpage(){
+function initpage() {
+ console.log(mpref.cfg);
+ console.log("APP:" + parent.app);
mpref.loadconfig();
- console.log(mpref);
- loadtable();
+ accounts.inittable();
+ return false;
}
-function loadtable(){
-
-}
-
-function gettbldata(){
-
-}
-function filltbldata(data){
-
-}
-
- <div class="w3-display-container">
- <!-- PAGE DATA START-->
- <div id="tbl_Accounts"></div>
- <!-- PAGE DATA END -->
+[% PROCESS macro/fields.tt %]
+<div class="w3-top w3-border-bottom w3-light-grey">
+ <div class="w3-bar">
+ <div class="toolbar" id="tbar_tbl_accounts">
+ <button class="w3-bar-item w3-button w3-border w3-blue-grey" onclick="accounts.viewtable();"> Accounts</button>
+
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="accounts.remove();"><img src="[% abspath%][% staticpath %]img/icons/remove.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="accounts.edit();"><img src="[% abspath%][% staticpath %]img/icons/edit.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="accounts.add();"><img src="[% abspath%][% staticpath %]img/icons/plus.svg" style="height: 20px;"></button>
+ </div>
+
</div>
+</div>
+<div class="w3-display-container panel" id="pnl_tbl_accounts" style="margin-top: 36px;">
+ <div id="tbl_accounts"></div>
+</div>
+[% INCLUDE "block/dlgdataload.tt" %]
+[% INCLUDE "block/dlgdeleterow.tt" %]
+[% INCLUDE "block/dlgmessage.tt" %]
+<script src="accounts.js"></script>
<div class="toolbar" id="tbar_tbl_invoices">
<button class="w3-bar-item w3-button w3-border w3-blue-grey" onclick="invoices.viewtable();"> Journal</button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-red" onclick="invoices.remove();"><i class=" icon-Delete"></i></button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-grey" onclick="invoices.edit();"><i class=" icon-Edit"></i></button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-gre" onclick="invoices.add();"><i class=" icon-Add"></i></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="invoices.remove();"><img src="[% abspath%][% staticpath %]img/icons/remove.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="invoices.edit();"><img src="[% abspath%][% staticpath %]img/icons/edit.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="invoices.add();"><img src="[% abspath%][% staticpath %]img/icons/plus.svg" style="height: 20px;"></button>
</div>
<div class="toolbar" id="tbar_frm_invoices" style="display: none;">
- <button class="w3-bar-item w3-button w3-border w3-blue-grey" onclick="invoices.viewtable();"> back</button>
-
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-grey" onclick="invoices.genpdf();"><i class="icon-Printer"></i></button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-grey" onclick="invoices.save();"><i class=" icon-Save"></i></button>
+ <button class="w3-bar-item w3-button w3-border" onclick="invoices.viewtable();"> back</button>
+ <div class="w3-bar-item" style="padding-bottom: 0px;"><span style="font-weight: bold; font-size: 13pt;">Rechnung</span></div>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="invoices.genpdf();"><img src="[% abspath%][% staticpath %]img/icons/Adobe_Acrobat.svg" style="height: 20px;"></button></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="invoices.save();"><img src="[% abspath%][% staticpath %]img/icons/save.svg" style="height: 20px;"></button>
</div>
</div>
</div>
<div id="tbl_invoices"></div>
</div>
<div class="w3-display-container panel" id="pnl_frm_invoices" style="display: none; margin-top: 36px;">
-
-
- <div class="w3-container" >
+ <div class="w3-container w3-padding" >
<form id="frm_invoices">
<div class="w3-container w3-threequarter">
[% fieldhidden('id','invoices','ident') %]
[% fieldselectbox('id_sender','invoices','Sender','w3-third','') %]
[% fieldeditbox('reference','invoices','Referenz','w3-third','') %]
</div>
- <div class="w3-cell-row">
+
- </div>
+ <div id="invoicenotes">
<div class="w3-cell-row">
[% fieldrichtextarea('headernote','invoices','Vorwort','','','100px','') %]
</div>
[% fieldrichtextarea('footernote','invoices','Nachwort','','','100px','') %]
</div>
</div>
+ </div>
<div class="w3-container w3-quarter">
<div class="w3-container">
[% fieldmoneybox('netamount','invoices','Netto','w3-half','readonly') %]
</div>
</form>
</div>
- <div class="w3-bar">
- <button class="w3-bar-item w3-button w3-border w3-right w3-red" onclick="bookings.remove();" ><i class=" icon-Delete"></i></button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-grey" onclick="bookings.edit();" ><i class=" icon-Edit"></i></button>
- <button class="w3-bar-item w3-button w3-border w3-right w3-blue-grey" onclick="bookings.add();" ><i class=" icon-Add"></i></button>
+ <div class="w3-bar w3-border-top w3-border-bottom">
+ <div class="w3-bar-item" style="padding-bottom: 0px;"><span style="font-weight: bold; font-size: 11pt;">Produkte / Dienstleistungen</span></div>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.remove();" ><img src="[% abspath%][% staticpath %]img/icons/remove.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.edit();" ><img src="[% abspath%][% staticpath %]img/icons/edit.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.add();" ><img src="[% abspath%][% staticpath %]img/icons/plus.svg" style="height: 20px;"></button>
</div>
<div id="tbl_bookings"></div>
fillformbydataclass("invoices", data.sqldata[0],invoices.choices, false);
//console.log(data.sqldata[0].invoicetype);
invoices.current = data.sqldata[0];
- if (data.sqldata[0].invoicetype == "inv-out") {
- //document.getElementById("netamount").readonly = true;
+ if (data.sqldata[0].invoicetype == "inv-in") {
+ document.getElementById("invoicenotes").style.display = 'none';
+ } else {
+ document.getElementById("invoicenotes").style.display = 'block';
}
bookings.gettbldata();
}
--- /dev/null
+var bookings ={
+ tbl: null,
+ name: "bookings",
+ initform: function(){
+
+ },
+ inittable: function(){
+ bookings.tbl = new Tabulator("#tbl_" + bookings.name, {
+ headerFilterPlaceholder:"filter...",
+ height: "92vh",
+ layout:"fitDataFill",
+ selectable:1,
+ columns:[
+
+ {title:"Datum", field:"bookingdate",headerFilter:"input"},
+ {title:"Anz.", field:"quantity",align:"right",headerFilter:"input"},
+ {title:"Einh.", field:"unit",align:"right",headerFilter:"input"},
+ {title:"Einheits<br/>Betrag", field:"unitamount",align:"right",headerFilter:"input"},
+ {title:"Beschreibung", field:"description",headerFilter:"input"},
+ {title:"Mwst.", field:"taxamount",align:"right"},
+ {title:"Netto", field:"netamount",align:"right"},
+ //{title:"", field:"taxpercent",align:"right",headerFilter:"input"},
+ {title:"Status", field:"status",headerFilter:"input"},
+ {title:"Empfänger", field:"receipient",headerFilter:"input"},
+ {title:"Rechnungs<br/>Status", field:"invoicestatus",headerFilter:"input"},
+ {title:"Product-Typ", field:"product_type",headerFilter:"input"}
+ ],
+ });
+ bookings.gettbldata();
+ },
+ gettbldata: function(){
+ req.reqdata("POST","db.cgi",{"db":parent.app + "/" + mpref.cfg.db,"get":"bookingslist",},bookings.loadtbldata);
+ },
+ loadtbldata: function(data){
+ if (data && data.sqldata){
+ bookings.tbl.setData(data.sqldata);
+ }
+ },
+ viewtable: function(){
+ bookings.gettbldata();
+ module.viewpanel('tbl_bookings');
+ },
+ add: function(){
+
+ },
+ edit: function(){
+
+ },
+ remove: function(){
+
+ }
+}
\ No newline at end of file
-var winh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
-var tblh = winh-54;
-var pagepref = undefined;
-var selection = [];
-// var cfg = {
-// byear: 2018
-// }
-var sums = { planned: {cnt:0,sum:0},sended: {cnt:0,sum:0},payed: {cnt:0,sum:0},delayed: {cnt:0,sum:0},total: {cnt:0,sum:0}};
-var shiftdown = false;
-function initpage(){
- console.log(appdb.url);
- pagepref = parent.usersystem.getPreference("bookings");
- if (pagepref === null){
- pagepref= {};
- }
- console.log(pagepref);
- //loadyears();
- loadtable();
- load_senders();
- load_receipients();
- load_dateranges();
+
+function initpage() {
+ console.log(mpref.cfg);
+ console.log("APP:" + parent.app);
+ mpref.loadconfig();
+ bookings.inittable();
+ return false;
}
-$(document).on('keydown',function(evt){
- if (evt.key= "Shift"){
- shiftdown = true;
- }
-});
-
-$(document).on('keyup',function(evt){
- if (evt.key = "Shift"){
- shiftdown = false;
- }
-});
-
-function loadtable(){
- var where = '';
- if (pagepref && pagepref.filter && Object.keys(pagepref.filter).length > 0){
- var whfilter = [];
- for (var i in pagepref.filter){
- console.log(i);
- if (i == 'bookingdate'){
- if ($("#daterange :selected").text() != ''){
- whfilter.push(pagepref.filter[i] + "='" + $("#daterange :selected").text() + "'");
- }
+// var winh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+// var tblh = winh-54;
+// var pagepref = undefined;
+// var selection = [];
+// // var cfg = {
+// // byear: 2018
+// // }
+// var sums = { planned: {cnt:0,sum:0},sended: {cnt:0,sum:0},payed: {cnt:0,sum:0},delayed: {cnt:0,sum:0},total: {cnt:0,sum:0}};
+// var shiftdown = false;
+// function initpage(){
+// console.log(appdb.url);
+// pagepref = parent.usersystem.getPreference("bookings");
+// if (pagepref === null){
+// pagepref= {};
+// }
+// console.log(pagepref);
+// //loadyears();
+// loadtable();
+// load_senders();
+// load_receipients();
+// load_dateranges();
+// }
+
+// $(document).on('keydown',function(evt){
+// if (evt.key= "Shift"){
+// shiftdown = true;
+// }
+// });
+
+// $(document).on('keyup',function(evt){
+// if (evt.key = "Shift"){
+// shiftdown = false;
+// }
+// });
+
+// function loadtable(){
+// var where = '';
+// if (pagepref && pagepref.filter && Object.keys(pagepref.filter).length > 0){
+// var whfilter = [];
+// for (var i in pagepref.filter){
+// console.log(i);
+// if (i == 'bookingdate'){
+// if ($("#daterange :selected").text() != ''){
+// whfilter.push(pagepref.filter[i] + "='" + $("#daterange :selected").text() + "'");
+// }
- } else {
- whfilter.push(i + "='" + pagepref.filter[i] + "'");
- }
+// } else {
+// whfilter.push(i + "='" + pagepref.filter[i] + "'");
+// }
- }
- if (whfilter.length > 0){
- where = ' where ' + whfilter.join( " AND ");
- }
+// }
+// if (whfilter.length > 0){
+// where = ' where ' + whfilter.join( " AND ");
+// }
- }
- console.log(where);
- sums = { planned: {cnt:0,sum:0},sended: {cnt:0,sum:0},payed: {cnt:0,sum:0},delayed: {cnt:0,sum:0},total: {cnt:0,sum:0}};
- var sql = "select strftime('%d.%m.%Y',invoicepositions.bookingdate) as bookingdate, invoicepositions.bookingdate as datesortable,invoicepositions.id,sender.company as sender,receipient.company as receipient, invoicepositions.description,replace(printf('%.2f€',quantity * unitamount),'.',',') as amount,quantity * unitamount as sumamount , invoicejournal.status from invoicepositions left join accounts sender on (invoicepositions.id_sender=sender.id) left join invoicejournal on (invoicepositions.id_invoice=invoicejournal.id) left join accounts receipient on (invoicepositions.id_receipient=receipient.id) " + where + " order by invoicepositions.bookingdate desc;";
- //console.log(sql);
- //$('#tbl_bookings').bootstrapTable('destroy');
- $("#tbl_bookings > tbody").html("");
- var data = appdb.dbquery(sql);
- //console.log(data.sqldata);
- for (var i in data.sqldata){
- var cstatus = "secondary";
- if (data.sqldata[i].status== "geplant"){
- sums.planned.cnt = sums.planned.cnt + 1;
- sums.planned.sum = sums.planned.sum + parseFloat(data.sqldata[i].sumamount);
- }
- if (data.sqldata[i].status== "bezahlt"){
- cstatus = "success";
- sums.payed.cnt = sums.payed.cnt + 1;
- sums.payed.sum = sums.payed.sum + parseFloat(data.sqldata[i].sumamount);
- }
- if (data.sqldata[i].status== "überfällig"){
- cstatus = "danger";
- sums.delayed.cnt = sums.delayed.cnt + 1;
- sums.delayed.sum = sums.delayed.sum + parseFloat(data.sqldata[i].sumamount);
- }
- if (data.sqldata[i].status== "verschickt"){
- cstatus = "warning";
- sums.sended.cnt = sums.sended.cnt + 1;
- sums.sended.sum = sums.sended.sum + parseFloat(data.sqldata[i].sumamount);
- }
- sums.total.cnt = sums.total.cnt + 1;
- sums.total.sum = sums.total.sum + parseFloat(data.sqldata[i].sumamount);
- var acolor = "";
- if (data.sqldata[i].amount.startsWith("-")){ acolor = "text-danger"; }
- var row = '<tr onclick="setselection(\''+ data.sqldata[i].id +'\');" id="' +data.sqldata[i].id + '">'+
- // '<td></td>' +
- '<td><span class="d-none">'+data.sqldata[i].datesortable+'</span> ' + data.sqldata[i].bookingdate+ '</td>' +
- '<td>' + data.sqldata[i].receipient+ '</td>' +
- '<td>' + data.sqldata[i].sender+ '</td>' +
- '<td>' + data.sqldata[i].description+ '</td>' +
- '<td class="btn-'+ cstatus+'">' + data.sqldata[i].status+ '</td>' +
- '<td class="'+ acolor +' right">' + data.sqldata[i].amount+ '</td>' +
- '</tr>';
-
- $("#tbl_bookings > tbody").append(row);
- }
- var cols = $("#tbl_bookings > tbody > tr:first-child").children();
- var colnum = cols.length -1
- console.log("childnum:" + colnum);
- for (var i=1;i<=colnum;i++){
- wx = $("#tbl_bookings > tbody > tr:first-child > td:nth-child("+ i +")").width();
- wx = wx +3;
- $("#tbl_bookings_head > thead > tr > th:nth-child("+ i +")").width(wx);
- }
- $("#cnt_planned").val(sums.planned.cnt);$("#sum_planned").val(sums.planned.sum.toFixed(2).toString().replace('.',','));
- $("#cnt_payed").val(sums.payed.cnt);$("#sum_payed").val(sums.payed.sum.toFixed(2).toString().replace('.',','));
- $("#cnt_delayed").val(sums.delayed.cnt);$("#sum_delayed").val(sums.delayed.sum.toFixed(2).toString().replace('.',','));
- $("#cnt_total").val(sums.total.cnt);$("#sum_total").val(sums.total.sum.toFixed(2).toString().replace('.',','));
- $("#cnt_sended").val(sums.sended.cnt);$("#sum_sended").val(sums.sended.sum.toFixed(2).toString().replace('.',','));
-}
+// }
+// console.log(where);
+// sums = { planned: {cnt:0,sum:0},sended: {cnt:0,sum:0},payed: {cnt:0,sum:0},delayed: {cnt:0,sum:0},total: {cnt:0,sum:0}};
+// var sql = "select strftime('%d.%m.%Y',invoicepositions.bookingdate) as bookingdate, invoicepositions.bookingdate as datesortable,invoicepositions.id,sender.company as sender,receipient.company as receipient, invoicepositions.description,replace(printf('%.2f€',quantity * unitamount),'.',',') as amount,quantity * unitamount as sumamount , invoicejournal.status from invoicepositions left join accounts sender on (invoicepositions.id_sender=sender.id) left join invoicejournal on (invoicepositions.id_invoice=invoicejournal.id) left join accounts receipient on (invoicepositions.id_receipient=receipient.id) " + where + " order by invoicepositions.bookingdate desc;";
+// //console.log(sql);
+// //$('#tbl_bookings').bootstrapTable('destroy');
+// $("#tbl_bookings > tbody").html("");
+// var data = appdb.dbquery(sql);
+// //console.log(data.sqldata);
+// for (var i in data.sqldata){
+// var cstatus = "secondary";
+// if (data.sqldata[i].status== "geplant"){
+// sums.planned.cnt = sums.planned.cnt + 1;
+// sums.planned.sum = sums.planned.sum + parseFloat(data.sqldata[i].sumamount);
+// }
+// if (data.sqldata[i].status== "bezahlt"){
+// cstatus = "success";
+// sums.payed.cnt = sums.payed.cnt + 1;
+// sums.payed.sum = sums.payed.sum + parseFloat(data.sqldata[i].sumamount);
+// }
+// if (data.sqldata[i].status== "überfällig"){
+// cstatus = "danger";
+// sums.delayed.cnt = sums.delayed.cnt + 1;
+// sums.delayed.sum = sums.delayed.sum + parseFloat(data.sqldata[i].sumamount);
+// }
+// if (data.sqldata[i].status== "verschickt"){
+// cstatus = "warning";
+// sums.sended.cnt = sums.sended.cnt + 1;
+// sums.sended.sum = sums.sended.sum + parseFloat(data.sqldata[i].sumamount);
+// }
+// sums.total.cnt = sums.total.cnt + 1;
+// sums.total.sum = sums.total.sum + parseFloat(data.sqldata[i].sumamount);
+// var acolor = "";
+// if (data.sqldata[i].amount.startsWith("-")){ acolor = "text-danger"; }
+// var row = '<tr onclick="setselection(\''+ data.sqldata[i].id +'\');" id="' +data.sqldata[i].id + '">'+
+// // '<td></td>' +
+// '<td><span class="d-none">'+data.sqldata[i].datesortable+'</span> ' + data.sqldata[i].bookingdate+ '</td>' +
+// '<td>' + data.sqldata[i].receipient+ '</td>' +
+// '<td>' + data.sqldata[i].sender+ '</td>' +
+// '<td>' + data.sqldata[i].description+ '</td>' +
+// '<td class="btn-'+ cstatus+'">' + data.sqldata[i].status+ '</td>' +
+// '<td class="'+ acolor +' right">' + data.sqldata[i].amount+ '</td>' +
+// '</tr>';
-function load_senders(){
- var sql = "select distinct (sender.company) as sender from invoicepositions left join accounts sender on (invoicepositions.id_sender=sender.id) order by sender.company;";
- $("#sender").html('<option hidden>Sender</option><option value=""></option>');
- var data = appdb.dbquery(sql);
+// $("#tbl_bookings > tbody").append(row);
+// }
+// var cols = $("#tbl_bookings > tbody > tr:first-child").children();
+// var colnum = cols.length -1
+// console.log("childnum:" + colnum);
+// for (var i=1;i<=colnum;i++){
+// wx = $("#tbl_bookings > tbody > tr:first-child > td:nth-child("+ i +")").width();
+// wx = wx +3;
+// $("#tbl_bookings_head > thead > tr > th:nth-child("+ i +")").width(wx);
+// }
+// $("#cnt_planned").val(sums.planned.cnt);$("#sum_planned").val(sums.planned.sum.toFixed(2).toString().replace('.',','));
+// $("#cnt_payed").val(sums.payed.cnt);$("#sum_payed").val(sums.payed.sum.toFixed(2).toString().replace('.',','));
+// $("#cnt_delayed").val(sums.delayed.cnt);$("#sum_delayed").val(sums.delayed.sum.toFixed(2).toString().replace('.',','));
+// $("#cnt_total").val(sums.total.cnt);$("#sum_total").val(sums.total.sum.toFixed(2).toString().replace('.',','));
+// $("#cnt_sended").val(sums.sended.cnt);$("#sum_sended").val(sums.sended.sum.toFixed(2).toString().replace('.',','));
+// }
+
+// function load_senders(){
+// var sql = "select distinct (sender.company) as sender from invoicepositions left join accounts sender on (invoicepositions.id_sender=sender.id) order by sender.company;";
+// $("#sender").html('<option hidden>Sender</option><option value=""></option>');
+// var data = appdb.dbquery(sql);
- for (var i in data.sqldata){
- $("#sender").append('<option value="'+data.sqldata[i].sender+'">'+data.sqldata[i].sender+'</option>');
- }
- if (pagepref && pagepref.filter && pagepref.filter.sender && pagepref.filter.sender != ''){
- //console.log("set selection:" + pagepref.filter.sender);
- $("#sender").val(pagepref.filter.sender);
- }
-}
+// for (var i in data.sqldata){
+// $("#sender").append('<option value="'+data.sqldata[i].sender+'">'+data.sqldata[i].sender+'</option>');
+// }
+// if (pagepref && pagepref.filter && pagepref.filter.sender && pagepref.filter.sender != ''){
+// //console.log("set selection:" + pagepref.filter.sender);
+// $("#sender").val(pagepref.filter.sender);
+// }
+// }
-function load_receipients(){
- var sql = "select distinct (receipient.company) as receipient from invoicepositions left join accounts receipient on (invoicepositions.id_receipient=receipient.id) order by receipient.company;";
- $("#receipient").html('<option hidden>Empfänger</option><option value=""></option>');
- var data = appdb.dbquery(sql);
+// function load_receipients(){
+// var sql = "select distinct (receipient.company) as receipient from invoicepositions left join accounts receipient on (invoicepositions.id_receipient=receipient.id) order by receipient.company;";
+// $("#receipient").html('<option hidden>Empfänger</option><option value=""></option>');
+// var data = appdb.dbquery(sql);
- for (var i in data.sqldata){
- $("#receipient").append('<option value="'+data.sqldata[i].receipient+'">'+data.sqldata[i].receipient+'</option>');
- }
- if (pagepref && pagepref.filter && pagepref.filter.receipient && pagepref.filter.receipient != ''){
- //console.log("set selection:" + pagepref.filter.receipient);
- $("#receipient").val(pagepref.filter.receipient);
- }
-}
+// for (var i in data.sqldata){
+// $("#receipient").append('<option value="'+data.sqldata[i].receipient+'">'+data.sqldata[i].receipient+'</option>');
+// }
+// if (pagepref && pagepref.filter && pagepref.filter.receipient && pagepref.filter.receipient != ''){
+// //console.log("set selection:" + pagepref.filter.receipient);
+// $("#receipient").val(pagepref.filter.receipient);
+// }
+// }
-function load_dateranges(){
- var sql = "select strftime('%Y',bookingdate) as daterange, 'strftime(''%Y'',bookingdate)' as filter from invoicepositions where bookingdate is not null group by daterange union select strftime('%Y %m',bookingdate) as daterange , 'strftime(''%Y %m'',bookingdate)' as filter from invoicepositions where bookingdate is not null group by daterange union select strftime('%Y Q',bookingdate) || (((CAST(strftime('%m',bookingdate) AS INT) -1 ) / 3) +1) as daterange ,'strftime(''%Y Q'',bookingdate) || (((CAST(strftime(''%m'',bookingdate) AS INT) -1 ) / 3) +1)' as filter from invoicepositions where bookingdate is not null group by daterange order by daterange desc;";
- $("#daterange").html('<option hidden>Datum</option><option value=""></option>');
- var data = appdb.dbquery(sql);
+// function load_dateranges(){
+// var sql = "select strftime('%Y',bookingdate) as daterange, 'strftime(''%Y'',bookingdate)' as filter from invoicepositions where bookingdate is not null group by daterange union select strftime('%Y %m',bookingdate) as daterange , 'strftime(''%Y %m'',bookingdate)' as filter from invoicepositions where bookingdate is not null group by daterange union select strftime('%Y Q',bookingdate) || (((CAST(strftime('%m',bookingdate) AS INT) -1 ) / 3) +1) as daterange ,'strftime(''%Y Q'',bookingdate) || (((CAST(strftime(''%m'',bookingdate) AS INT) -1 ) / 3) +1)' as filter from invoicepositions where bookingdate is not null group by daterange order by daterange desc;";
+// $("#daterange").html('<option hidden>Datum</option><option value=""></option>');
+// var data = appdb.dbquery(sql);
- for (var i in data.sqldata){
- $("#daterange").append('<option value="'+data.sqldata[i].filter+'">'+data.sqldata[i].daterange+'</option>');
- }
-}
+// for (var i in data.sqldata){
+// $("#daterange").append('<option value="'+data.sqldata[i].filter+'">'+data.sqldata[i].daterange+'</option>');
+// }
+// }
-function setfilter(id,field){
- console.log("setFilter");
- if (pagepref['filter'] === undefined){
- pagepref['filter'] = {};
- }
- if ($("#" + id + " :selected").val() != ""){
- pagepref['filter'][field] = $("#" + id + " :selected").val();
- }
- else {
- delete pagepref['filter'][field];
- $("#" + id + "").val($("#"+ id +" option:first").val());
- }
- parent.usersystem.setPreference('bookings',pagepref);
- loadtable();
-}
+// function setfilter(id,field){
+// console.log("setFilter");
+// if (pagepref['filter'] === undefined){
+// pagepref['filter'] = {};
+// }
+// if ($("#" + id + " :selected").val() != ""){
+// pagepref['filter'][field] = $("#" + id + " :selected").val();
+// }
+// else {
+// delete pagepref['filter'][field];
+// $("#" + id + "").val($("#"+ id +" option:first").val());
+// }
+// parent.usersystem.setPreference('bookings',pagepref);
+// loadtable();
+// }
-function booking_new(){
- parent.browserapp.loadmodulepage('bookings','form_booking',{"id":null});
-}
+// function booking_new(){
+// parent.browserapp.loadmodulepage('bookings','form_booking',{"id":null});
+// }
-function booking_edit(){
- //var inv_id= getTableSelectionID();
- if (inv_id){
- parent.browserapp.loadmodulepage('bookings','form_booking',{"id":inv_id});
- }
+// function booking_edit(){
+// //var inv_id= getTableSelectionID();
+// if (inv_id){
+// parent.browserapp.loadmodulepage('bookings','form_booking',{"id":inv_id});
+// }
-}
+// }
-function booking_delete(){
+// function booking_delete(){
-}
+// }
-function booking_duplicate(){
+// function booking_duplicate(){
-}
+// }
-function setselection(id){
- if (shiftdown === true){
- if ($("#" + id).hasClass('highlight')){
- $("#" + id).removeClass('highlight');
- selection.splice($.inArray(id, selection),1);
- }else {
- $("#" + id).addClass('highlight');
- selection.push(id);
- }
- } else {
- $("#" + id).addClass('highlight').siblings().removeClass('highlight');
- selection = [id];
- }
-}
+// function setselection(id){
+// if (shiftdown === true){
+// if ($("#" + id).hasClass('highlight')){
+// $("#" + id).removeClass('highlight');
+// selection.splice($.inArray(id, selection),1);
+// }else {
+// $("#" + id).addClass('highlight');
+// selection.push(id);
+// }
+// } else {
+// $("#" + id).addClass('highlight').siblings().removeClass('highlight');
+// selection = [id];
+// }
+// }
-
- <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
- <a class="navbar-brand" href="#">Buchungen</a>
- <div class="ml-auto">
- <div class="btn-group" role="group" aria-label="Basic example">
- <button class="btn btn-primary" onclick="booking_new();"><i class="fas fa-plus"></i><br/>New</button>
- <button class="btn btn-primary" onclick="booking_edit();"><i class="fas fa-edit"></i><br/>Edit</button>
- <button class="btn btn-primary" onclick="booking_delete();"><i class="fas fa-trash"></i><br/>Delete</button>
- <button class="btn btn-primary" onclick="booking_clone();"><i class="fas fa-clone"></i><br/>Dupl.</button>
-
- </div>
- </nav>
- <div class="cotainer-fluid" style="margin-top: 52px;">
- <table style="width: 100%;" class="noselect">
- <tr>
- <td style="padding: 0px; margin: 0px;">
- <table class="table" style="width: 100%; margin: 0px;" id="tbl_bookings_head">
- <thead class="thead-dark">
- <tr>
- <th><select id="daterange" class="form-control" onchange="setfilter('daterange','bookingdate');"></select></th>
- <th><select id="receipient" class="form-control" onchange="setfilter('receipient','receipient');"></select></th>
- <th><select id="sender" onchange="setfilter('sender','sender');" class="form-control"></select></th>
- <th>Beschreibung</th>
- <th>
- <select id="status" onchange="setfilter('status','status');" class="form-control">
- <option hidden>Status</option>
- <option value=""></option>
- <option value="bezahlt">bezahlt</option>
- <option value="verschickt">verschickt</option>
- <option value="geplant">geplant</option>
- <option value="überfällig">überfällig</option>
- </select>
- </th>
- <th >Betrag</th>
- </tr>
- </thead>
- </table>
- </td>
- </tr>
- <tr>
- <td>
- <div style="width: 100%; height: 80vh; overflow-y: scroll;">
- <table id="tbl_bookings" style="width: 100%;" class="table table-bordered table-hover table-striped">
- <tbody></tbody>
- </table>
- </div>
- </td>
- </tr>
- </table>
- <div class="row bg-dark" style="margin: 0px;width: 100%; height: 10vh; overflow:hidden;">
- <div class="col btn-secondary">
- <div class="form-group">
- <label>geplant</label>
- <div class="form-inline">
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">Σ</div>
- </div>
- <input type="text" class="form-control right" id="cnt_planned"/>
- </div>
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">€</div>
- </div>
- <input type="text" class="form-control right" id="sum_planned"/>
- </div>
- </div>
- </div>
- </div>
- <div class="col btn-warning">
- <div class="form-group">
- <label>verschickt</label>
- <div class="form-inline">
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">Σ</div>
- </div>
- <input type="text" class="form-control right" id="cnt_sended"/>
- </div>
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">€</div>
- </div>
- <input type="text" class="form-control right" id="sum_sended"/>
- </div>
- </div>
- </div>
- </div>
- <div class="col btn-success">
- <div class="form-group">
- <label>bezahlt</label>
- <div class="form-inline">
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">Σ</div>
- </div>
- <input type="text" class="form-control right" id="cnt_payed"/>
- </div>
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">€</div>
- </div>
- <input type="text" class="form-control right" id="sum_payed"/>
- </div>
- </div>
- </div>
- </div>
- <div class="col btn-danger">
- <div class="form-group">
- <label>überfällig</label>
- <div class="form-inline">
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">Σ</div>
- </div>
- <input type="text" class="form-control right" id="cnt_delayed"/>
- </div>
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">€</div>
- </div>
- <input type="text" class="form-control right" id="sum_delayed"/>
- </div>
- </div>
- </div>
- </div>
- <div class="col btn-dark">
- <div class="form-group">
- <label>Total</label>
- <div class="form-inline">
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">Σ</div>
- </div>
- <input type="text" class="form-control right" id="cnt_total"/>
- </div>
- <div class="input-group" style="margin: 0px !important;">
- <div class="input-group-prepend">
- <div class="input-group-text">€</div>
- </div>
- <input type="text" class="form-control right" id="sum_total"/>
- </div>
- </div>
- </div>
- </div>
+[% PROCESS macro/fields.tt %]
+<div class="w3-top w3-border-bottom w3-light-grey">
+ <div class="w3-bar">
+ <div class="toolbar" id="tbar_tbl_bookings">
+ <button class="w3-bar-item w3-button w3-border w3-blue-grey" onclick="bookings.viewtable();"> bookings</button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.remove();"><img src="[% abspath%][% staticpath %]img/icons/remove.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.edit();"><img src="[% abspath%][% staticpath %]img/icons/edit.svg" style="height: 20px;"></button>
+ <button class="w3-bar-item w3-button w3-border w3-right" onclick="bookings.add();"><img src="[% abspath%][% staticpath %]img/icons/plus.svg" style="height: 20px;"></button>
+ </div>
+
</div>
- </div>
\ No newline at end of file
+</div>
+<div class="w3-display-container panel" id="pnl_tbl_bookings" style="margin-top: 36px;">
+ <div id="tbl_bookings"></div>
+</div>
+[% INCLUDE "block/dlgdataload.tt" %]
+[% INCLUDE "block/dlgdeleterow.tt" %]
+[% INCLUDE "block/dlgmessage.tt" %]
+<script src="bookings.js"></script>
\ No newline at end of file
--- /dev/null
+<img src="[% abspath %][% staticpath %]img/package.svg" style="width: 64px;"><br/>RPInas
\ No newline at end of file
--- /dev/null
+<!doctype html>\r
+<html lang="en">\r
+ <head>\r
+ <meta charset="utf-8">\r
+ <meta name="viewport" content="width=device-width, initial-scale=1">\r
+ <meta name="description" content="">\r
+ <meta name="author" content="">\r
+ <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />\r
+ <meta http-equiv="Pragma" content="no-cache" />\r
+ <meta http-equiv="Expires" content="0" />\r
+ <!--<link rel="icon" href="../img/favicon/creorga.png">-->\r
+\r
+ <title>Creorga </title>\r
+\r
+ <link href="../vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">\r
+ <link href="../css/main.css" rel="stylesheet">\r
+ </head>\r
+\r
+ <body oncontextmenu="return false;">\r
+\r
+ <nav class="navbar navbar-dark bg-dark fixed-top justify-content-between flex-nowrap flex-row">\r
+\r
+ <div class="mr-auto">\r
+ <div class="btn-group" role="group" aria-label="Main">\r
+ <button class="btn btn-default" id="mnubtn_childs" onclick="app.loadpage('modules/childs/index.html');"><img src="../img/modules/Children.svg" style="width: 32px; height: 32px;"/><br/>Enfants</button>\r
+ <div class="btn-group" role="group">\r
+ <button type="button" id="mnubtn_presences" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
+ <img src="../img/modules/Check.svg" style="width: 32px; height: 32px;"/><br/>Présences\r
+ </button>\r
+ <div class="dropdown-menu" aria-labelledby="mnubtn_presences">\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/presences/dailypresences.html');">Présences par jour</a>\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/presences/weeklypresences.html');">Présences par Semaine</a>\r
+ </div>\r
+ </div>\r
+ <div class="btn-group" role="group">\r
+ <button type="button" id="mnubtn_calendar" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
+ <img src="../img/modules/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendriers\r
+ </button>\r
+ <div class="dropdown-menu" aria-labelledby="mnubtn_calendar">\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/index.html');">Calendrier des Enfants</a>\r
+ [% IF creorga.modules.staff.planning %]\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/calorganisation.html');">Calendrier du Staff</a>\r
+ [% END %]\r
+ [% IF creorga.modules.staff.vacancy %]\r
+ <a class="dropdown-item" href="javascript:app.loadpage('modules/calendar/calvacancy.html');">Calendrier des Congés</a>\r
+ [% END %]\r
+ </div>\r
+ </div>\r
+\r
+ [% IF creorga.modules.staff.menu %]\r
+ <button class="btn btn-default" id="mnubtn_stafflist" onclick="app.loadpage('modules/staff/stafflist.html');" ><img src="../img/modules/Team.svg" style="width: 32px; height: 32px; "/><br/>Employé(e)s</button>\r
+ [% END %]\r
+ </div>\r
+ </div>\r
+\r
+ <div class="ml-auto">\r
+ <div class="btn-group" role="group" aria-label="Right">\r
+ <div class="btn-group">\r
+ [% IF creorga.modules.creche.menu %]\r
+ <button type="button" class="btn btn-default" id="mnubtn_creche" onclick="app.loadpage('modules/creche/creche.html');"><img src="../img/modules/Home.svg" style="width: 32px; height: 32px;"/><br/>Crèche</button>\r
+ [% END %]\r
+ <select id="crechelist" class="btn btn-default" class="form-control" onchange="app.changesite();">\r
+\r
+ </select>\r
+ \r
+</div>\r
+ </div>\r
+ \r
+ </div>\r
+\r
+ \r
+ </nav>\r
+\r
+ <main role="main" class="container-fluid">\r
+\r
+ <iframe src="modules/childs/index.html" id="appframe" style="width: 100%; height: calc(100vh - 90px); margin: 0px; padding: 0px;"></iframe>\r
+\r
+ </main>\r
+\r
+\r
+ <script src="../vendor/jquery/jquery.min.js"></script>\r
+ <script src="../vendor/bootstrap/js/bootstrap.bundle.min.js"></script>\r
+ <script src="../js/app.js"></script>\r
+ <script src="../js/webpreferences.js" type="text/javascript"></script>\r
+ <script src="../js/webdatabase.js" type="text/javascript"></script>\r
+ \r
+\r
+ </body>\r
+</html>\r
<link rel="stylesheet" href="[% abspath %][% staticpath %]vendor/choices/choices.css?v=[% vstamp %]">
<link rel="stylesheet" href="[% abspath %][% staticpath %]vendor/flatpickr/flatpickr.min.css?v=[% vstamp %]">
<link rel="stylesheet" href="[% abspath %][% staticpath %]vendor/flatpickr/themes/airbnb.css?v=[% vstamp %]">
- <link rel="stylesheet" href="[% abspath %][% staticpath %]vendor/fmicons/icons.css?v=[% vstamp %]">
+ <!-- <link rel="stylesheet" href="[% abspath %][% staticpath %]vendor/fmicons/icons.css?v=[% vstamp %]"> -->
[% #INCLUDE "module/$module/css.tt" %]
<!-- <script>
my $allapp = builder {
enable "DirIndex", dir_index => 'index.html';
- mount "/" => Plack::App::WrapCGI->new(script => $RealBin."/CGI/index.cgi",execute => 1)->to_app;
+ mount "/" => Plack::App::WrapCGI->new(script => $RealBin."/CGI/index.cgi",)->to_app;#,execute=> 1
- opendir(API,dirname($0)."/CGI/api");
+ opendir(API,$RealBin."/CGI/api");
while (my $s = readdir(API)){
if ($s =~ /\.cgi$/){
- mount "/api/".$s => Plack::App::WrapCGI->new(script => $RealBin."/CGI/api/".$s,execute => 1)->to_app;
+ mount "/api/".$s => Plack::App::WrapCGI->new(script => $RealBin."/CGI/api/".$s ,)->to_app;
}
}
closedir(API);
--- /dev/null
+<svg id="glyphicons-basic" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
+ <path id="package" d="M22.95465,14.261,11.06659,6.19409l3.96173-2.37671,11.99982,7.99951ZM9.17657,7.32812,5.028,9.81689l12.00019,8L21.06476,15.395ZM4,19.53516l12,7.99975V19.53516l-12-8Zm20-3.56885v2.71655a.50018.50018,0,0,1-.24274.429l-1,.59985A.5.5,0,0,1,22,19.283V17.166l-4,2.40014v7.99951l10-5.99926V13.56616Z"/>
+</svg>