diff --git a/css/app.min.2.css b/css/app.min.2.css
index 3d35011..69523d6 100644
--- a/css/app.min.2.css
+++ b/css/app.min.2.css
@@ -1588,11 +1588,28 @@ select.chosen {
border-radius: 0;
}
+.timepicker-picker .btn:not(.palette-White):not(.btn-default) {
+ color: #333;
+}
+
+.timepicker-picker .btn-primary {
+ color: #333;
+ background-color: #fff;
+ border-color: transparent;
+}
+
+.timepicker-picker .btn-primary:hover:hover {
+ color: #333;
+ background-color: #fff;
+ border-color: transparent;
+}
+
+/*
.timepicker-picker .btn,
.timepicker-picker .btn:hover {
background: #fff;
color: #333;
-}
+} */
.datepicker.top {
-webkit-transform-origin: 0 100% !important;
diff --git a/html/corte.html b/html/corte.html
index dea5917..29d72e3 100644
--- a/html/corte.html
+++ b/html/corte.html
@@ -7,6 +7,7 @@
Skynet
+
@@ -17,6 +18,25 @@
+
+
+
+
+
+
+
@@ -242,7 +262,160 @@
-
+
+
+
+
+
+
+
+
+
+
+ Montos |
+ Fechas |
+
+
+ Inicial |
+ Ventas |
+ Final |
+ Diferencia |
+ Inicio |
+ Fin |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ No. Ticket |
+ Fecha |
+ Estado |
+ total |
+ Pago |
+ Cambio |
+ Empleado |
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -270,8 +443,12 @@ Corte de caja
-
+
+
+
+
+
diff --git a/img/details_close.png b/img/details_close.png
new file mode 100644
index 0000000..9c7d698
Binary files /dev/null and b/img/details_close.png differ
diff --git a/img/details_open.png b/img/details_open.png
new file mode 100644
index 0000000..c0edf44
Binary files /dev/null and b/img/details_open.png differ
diff --git a/js/client_side/cut.js b/js/client_side/cut.js
new file mode 100644
index 0000000..55cb57b
--- /dev/null
+++ b/js/client_side/cut.js
@@ -0,0 +1,311 @@
+window.$ = window.jQuery = require('jquery');
+const Enumerable = require('linq');
+require('../node_modules/@chenfengyuan/datepicker/dist/datepicker')
+require('../node_modules/bootstrap-datetimepicker-npm/build/js/bootstrap-datetimepicker.min.js')
+require('bootstrap-validator')
+require('../libs/js/jquery.mCustomScrollbar')
+require( 'datatables.net-bs4' )();
+require( 'datatables.net-responsive-dt' )()
+var dt = require( 'datatables.net' )( window, $ );
+let apiURL = '';
+var port = 51990; // 8080 51990
+var _tickets;
+var tableTickets;
+var tableHistorial;
+let fechaInicio = new Date();
+let fechaFin = new Date();
+let dpFechaInicio;
+let dpFechaFin;
+
+$(document).ready(function() {
+ // apiURL = 'http://' + sessionStorage.getItem('IPServer') + ':' + port + '/';
+ apiURL = 'http://localhost:' + port + '/';
+
+
+ fechaInicio = new Date();
+ fechaFin = new Date();
+
+ dpFechaInicio = $('#dpFechaInicio').datetimepicker({
+ locale: 'es',
+ format : 'DD/MM/YYYY hh:mm A',
+ defaultDate: fechaInicio
+ });
+ dpFechaFin = $('#dpFechaFin').datetimepicker({
+ locale: 'es',
+ format : 'DD/MM/YYYY hh:mm A',
+ defaultDate: fechaFin
+ });
+
+ inicializarDatePickerEvents();
+
+ obtenerDetalleVentas();
+
+ obtenerHistorialCortes();
+});
+
+function obtenerDetalleVentas() {
+ var url = apiURL + 'api/Ticket/getTicketsPay?fechaInicio=' + fechaInicio.toJSON() + '&fechaFin=' + fechaFin.toJSON();
+ $.ajax({
+ url: url,
+ type: "GET",
+ contentType: "application/json",
+ headers: httpHeaders(),
+ success: function (data, textStatus, jqXHR) {
+ if (data) {
+ llenarCamposCorte(data);
+ tableTickets = $('#example').DataTable({
+ data: data,
+ "columnDefs": [
+ { className: "text-right", "targets": [4,5,6] },
+ { className: "text-nowrap", "targets": [2] }
+ ],
+ columns: [
+ {
+ "className": 'details-control',
+ "orderable": false,
+ "data": null,
+ "defaultContent": ''
+ },
+ { data: "idTicket" },
+ { data: "fechaStr" },
+ { data: "estado" },
+ { data: "totalStr" },
+ { data: "pagoStr" },
+ { data: "cambioStr" },
+ { data: "Usuario.nombreCompleto" },
+ ]
+ });
+ }
+ },
+ error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
+ });
+}
+
+function obtenerHistorialCortes() {
+ var url = apiURL + 'api/Corte/cortes';
+ $.ajax({
+ url: url,
+ type: "GET",
+ contentType: "application/json",
+ headers: httpHeaders(),
+ success: function (data, textStatus, jqXHR) {
+ if (data) {
+
+ tableHistorial = $('#historial').DataTable({
+ data: data,
+ // "columnDefs": [
+ // { className: "text-right", "targets": [4,5,6] },
+ // { className: "text-nowrap", "targets": [2] }
+ // ],
+ columns: [
+ { data: "montoInicialStr" },
+ { data: "montoVentasStr" },
+ { data: "montoFinalStr" },
+ { data: "diferenciaStr" },
+ { data: "fechaInicioStr" },
+ { data: "fechaFinStr" },
+ ],
+ "paging": false,
+ "ordering": false,
+ "info": false,
+ "searching": false,
+ responsive: true
+ });
+ }
+ },
+ error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
+ });
+}
+
+function detalleTicketVenta(data) {
+ let html = `
+
+
+ Producto |
+ Precio |
+ Cantidad |
+ Total |
+
+
+
`
+ return html;
+}
+
+$(document).off('click', '#example tbody td.details-control').on('click', '#example tbody td.details-control', function () {
+ var tr = $(this).closest('tr');
+ var row = tableTickets.row(tr);
+
+ if ( row.child.isShown()) {
+ // This row is already open - close it
+ row.child.hide();
+ tr.removeClass('shown');
+ }
+ else {
+ // Open this row
+ row.child( detalleTicketVenta(row.data())).show();
+ tr.addClass('shown');
+ $('#ticketDetalle'+ row.data().idTicket).DataTable({
+ data: row.data().Detalle,
+ columns: [
+ { data: "Producto.nombre" },
+ { data: "precioFinalStr" },
+ { data: "cantidad" },
+ { data: "totalStr" }
+ ],
+ "paging": false,
+ "ordering": false,
+ "info": false,
+ "searching": false
+ });
+ }
+});
+
+/**
+ * Calcular la diferencia y habilitar o deshabilitar
+ * el boton de guardar
+ */
+$('#montoFinal').blur(function () {
+ const montoFinal = parseInt($(this).val());
+ const montoInicial = parseInt($('#montoInicial').val());
+ const montoVentas = parseInt($('#montoVentas').val());
+ const $diferencia = $('#diferencia');
+ const $btnGuardarCorte = $('#btnGuardarCorte');
+
+ if (!isNaN(montoFinal)) {
+ const diferencia = montoFinal - montoInicial - montoVentas;
+ $diferencia.val(diferencia);
+ $btnGuardarCorte.removeAttr('disabled');
+ } else {
+ $diferencia.val(0);
+ $btnGuardarCorte.attr('disabled', true);
+ }
+});
+
+/**
+ * Guardar corte
+ */
+$('#btnGuardarCorte').click(function () {
+ const corte = JSON.parse(sessionStorage.getItem('corte'));
+ const montoFinal = parseInt($('#montoFinal').val());
+ const montoVentas = parseInt($('#montoVentas').val());
+ const diferencia = parseInt($('#diferencia').val());
+
+ corte.montoFinal = montoFinal;
+ corte.montoVentas = montoVentas;
+ corte.diferencia = diferencia;
+
+ actualizarCorte(corte);
+});
+
+/**
+ * Actualizar corte
+ * @param {*} corte
+ */
+function actualizarCorte(corte) {
+ var corteURL = apiURL + 'api/corte/PutCorte';
+ $.ajax({
+ url: corteURL,
+ type: "PUT",
+ data: JSON.stringify(corte),
+ contentType: "application/json",
+ async: true,
+ processData: false,
+ cache: false,
+ headers: httpHeaders(),
+ success: function (data, textStatus, jqXHR) {
+ if (jqXHR.status === 204) { // exitoso
+ sessionStorage.removeItem('corte');
+ const jwt = parseJwt(sessionStorage.token);
+ const idUsuario = parseInt(jwt.nameid);
+ ObtenerCorte(idUsuario);
+ }
+ },
+ error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
+ });
+}
+
+/**
+ * Obtener el corte y guardarlo en el storage
+ */
+function ObtenerCorte(idUsuario) {
+ var corteURL = apiURL + 'api/corte/crear';
+ $.ajax({
+ url: corteURL,
+ type: "POST",
+ data: JSON.stringify(idUsuario),
+ contentType: "application/json",
+ headers: httpHeaders(),
+ success: function (data, textStatus, jqXHR) {
+ console.log(data);
+ sessionStorage.setItem('corte', JSON.stringify(data));
+ },
+ error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
+ });
+}
+
+/**
+ * Inicializar los controles date pickers
+ */
+function inicializarDatePickerEvents() {
+ // Date picker fecha de inicio
+ dpFechaInicio.on('dp.change', function (e) {
+ fechaInicio = e.date.toDate();
+ dpFechaFin.data("DateTimePicker").date(fechaInicio);
+ });
+
+ // Date picker fecha fin
+ dpFechaFin.on('dp.change', function (e) {
+ if(e.date.toDate() < fechaInicio) {
+ dpFechaFin.data("DateTimePicker").date(fechaInicio);
+ } else {
+ fechaFin = e.date.toDate();
+ }
+ });
+
+ // buscar tickets segun la fecha de inicio y fin
+ $('#searchTicketsPaid').click(function() {
+ tableTickets.destroy();
+ obtenerDetalleVentas();
+ });
+}
+
+/**
+ * Llenar los campos de los modulos del corte
+ */
+function llenarCamposCorte(ventas) {
+ const corte = JSON.parse(sessionStorage.getItem('corte'));
+ const montoVentas = Enumerable.from(ventas).sum(s => s.total);
+
+ $('#montoInicial').val(corte.montoInicial);
+ $('#montoVentas').val(montoVentas)
+}
+
+/**
+ * Parsear JWT
+ */
+function parseJwt (token) {
+ var base64Url = token.split('.')[1];
+ var base64 = base64Url.replace('-', '+').replace('_', '/');
+ return JSON.parse(window.atob(base64));
+}
+
+
+/**
+ *
+ * @param {*} data Error data
+ * @param {*} textStatus text status
+ * @param {*} jqXHR http response
+ */
+function errorAjaxHandler(data, textStatus, jqXHR) {
+ console.log('Data: ');
+ console.log(data);
+ console.log('\n status: ' + textStatus + '\n xhr: ' + jqXHR);
+}
+
+/**
+ * autorizacion http header para obtener datos desde
+ * el API
+ */
+function httpHeaders() {
+ return { "Authorization": sessionStorage.getItem('token') };
+}
\ No newline at end of file
diff --git a/js/client_side/login.js b/js/client_side/login.js
index 1b3a50e..47a10b0 100644
--- a/js/client_side/login.js
+++ b/js/client_side/login.js
@@ -27,8 +27,9 @@ $("#btnLogin").click(function (e) {
success: function (data, textStatus, jqXHR) {
// sessionStorage.setItem("userLoggedIn", JSON.stringify(data[0]));
sessionStorage.setItem("token", data);
-
- document.location.href = "index.html";
+ const jwt = parseJwt(sessionStorage.token);
+ const idUsuario = parseInt(jwt.nameid);
+ ObtenerCorte(idUsuario);
},
error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
});
@@ -37,7 +38,22 @@ $("#btnLogin").click(function (e) {
});
-
+function ObtenerCorte(idUsuario) {
+ var corteURL = apiURL + 'api/corte/crear';
+ $.ajax({
+ url: corteURL,
+ type: "POST",
+ data: JSON.stringify(idUsuario),
+ contentType: "application/json",
+ headers: httpHeaders(),
+ success: function (data, textStatus, jqXHR) {
+ console.log(data);
+ sessionStorage.setItem('corte', JSON.stringify(data));
+ document.location.href = "index.html";
+ },
+ error: function (data, textStatus, jqXHR) { errorAjaxHandler(data, textStatus, jqXHR); }
+ });
+}
$('#frNewAccont').validator().on('submit', function (e) {
diff --git a/js/client_side/sales.js b/js/client_side/sales.js
index 8c43793..2cfbbd9 100644
--- a/js/client_side/sales.js
+++ b/js/client_side/sales.js
@@ -127,7 +127,7 @@ function obtenerTotalTicket() {
const prod = Enumerable.from(productos).where(w => idProductos.indexOf(w.idProducto) > -1 && w.precio === 0).select(s => s.idProducto).toArray();
if (prod.length > 0) {
- let totalProdEspeciales = Enumerable.from(ticket.Detalle).where(w => prod.indexOf(w.idProducto) > -1).sum(s => s.precio);
+ let totalProdEspeciales = Enumerable.from(ticket.Detalle).where(w => prod.indexOf(w.idProducto) > -1).sum(s => s.total);
total = total + totalProdEspeciales;
}
diff --git a/js/common.js b/js/common.js
index fde6b7b..6005d5f 100644
--- a/js/common.js
+++ b/js/common.js
@@ -14,7 +14,7 @@ var _tickets = [];
var _ticket = {};
var _recordsNoPay = [];
var _idTicket = 0;
-var port = 8080; // 8080 51990
+var port = 51990; // 8080 51990
/*--------------------------------------
@@ -93,8 +93,8 @@ function alertExecuteFunction(title, text, type, functionHandle) {
$(document).ready(function () {
if (sessionStorage.getItem('IPServer') !== null) {
- apiURL = 'http://' + sessionStorage.getItem('IPServer') + ':' + port + '/';
- // apiURL = 'http://localhost:' + port + '/';
+ // apiURL = 'http://' + sessionStorage.getItem('IPServer') + ':' + port + '/';
+ apiURL = 'http://localhost:' + port + '/';
} else {
ipcRenderer.send('goForIPServer', 1);
}
@@ -107,8 +107,8 @@ $(document).ready(function () {
ipcRenderer.on('getForIPServer', (event, arg) => {
var ips = JSON.parse(arg);
sessionStorage.setItem('IPServer', ips.ipServer);
- apiURL = 'http://' + ips.ipServer + ':' + port + '/';
- // apiURL = 'http://localhost:' + port + '/';
+ // apiURL = 'http://' + ips.ipServer + ':' + port + '/';
+ apiURL = 'http://localhost:' + port + '/';
sessionStorage.setItem('IPServer', ips.ipServer);
});
diff --git a/js/functions.js b/js/functions.js
index a8bed9e..814f3a3 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -99,132 +99,6 @@ $(document).ready(function(){
}
-
-
-
-
-
- /*
- * Calendar Widget
- */
- if($('#calendar-widget')[0]) {
-
-
-
- (function(){
- $('#cw-body').fullCalendar({
- contentHeight: 'auto',
- theme: true,
- header: {
- right: 'next',
- center: 'title, ',
- left: 'prev'
- },
- defaultDate: '2014-06-12',
- editable: true,
- events: [
- {
- title: 'All Day',
- start: '2014-06-01',
- className: 'bgm-cyan'
- },
- {
- title: 'Long Event',
- start: '2014-06-07',
- end: '2014-06-10',
- className: 'bgm-orange'
- },
- {
- id: 999,
- title: 'Repeat',
- start: '2014-06-09',
- className: 'bgm-lightgreen'
- },
- {
- id: 999,
- title: 'Repeat',
- start: '2014-06-16',
- className: 'bgm-lightblue'
- },
- {
- title: 'Meet',
- start: '2014-06-12',
- end: '2014-06-12',
- className: 'bgm-green'
- },
- {
- title: 'Lunch',
- start: '2014-06-12',
- className: 'bgm-cyan'
- },
- {
- title: 'Birthday',
- start: '2014-06-13',
- className: 'bgm-amber'
- },
- {
- title: 'Google',
- url: 'http://google.com/',
- start: '2014-06-28',
- className: 'bgm-amber'
- }
- ]
- });
- })();
-
- //Display Current Date as Calendar widget header
- var mYear = moment().format('YYYY');
- var mDay = moment().format('dddd, MMM D');
- $('#calendar-widget .cwh-year').html(mYear);
- $('#calendar-widget .cwh-day').html(mDay);
-
- }
-
- /*
- * Weather Card
- */
- if ($('#c-weather')[0]) {
- $.simpleWeather({
- location: 'Austin, TX',
- woeid: '',
- unit: 'f',
- success: function(weather) {
- var html = '' +
- '';
-
- $("#c-weather").html(html);
-
- setTimeout(function() {
-
-
- for(i = 0; i < 5; i++) {
- var l = '' +
- '- ' +
- '' +
- '
' +
- '- '+weather.forecast[i].high+'/'+weather.forecast[i].low+'
' +
- '- '+weather.forecast[i].text+'
' +
- '
';
-
- $('.cw-upcoming').append(l);
- }
- });
- },
- error: function(error) {
- $("#c-weather").html(''+error+'
');
- }
- });
- }
-
/*
* Auto Hight Textarea
*/
diff --git a/main.js b/main.js
index b8e457a..1234c12 100644
--- a/main.js
+++ b/main.js
@@ -67,10 +67,10 @@ var Main = {
slashes: true
}));
- mainWindow.setMenu(null);
+ // mainWindow.setMenu(null);
// Open the DevTools.
- // mainWindow.webContents.openDevTools();
+ mainWindow.webContents.openDevTools();
// Emitted when the window is closed.
mainWindow.on('closed', function () {
diff --git a/package-lock.json b/package-lock.json
index c2ed615..8e45915 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "cyber-server",
- "version": "0.1.7",
+ "version": "0.1.11",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -315,6 +315,29 @@
"hoek": "4.x.x"
}
},
+ "bootstrap": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz",
+ "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E="
+ },
+ "bootstrap-datetimepicker-npm": {
+ "version": "4.17.37-npm",
+ "resolved": "https://registry.npmjs.org/bootstrap-datetimepicker-npm/-/bootstrap-datetimepicker-npm-4.17.37-npm.tgz",
+ "integrity": "sha1-ZGHJ+raW52IaRr6+KO0VAzPL2iY=",
+ "requires": {
+ "bootstrap": "^3.3",
+ "jquery": ">=1.8.3 <2.2.0",
+ "moment": "~2.8",
+ "moment-timezone": "~0.4"
+ },
+ "dependencies": {
+ "moment": {
+ "version": "2.8.4",
+ "resolved": "http://registry.npmjs.org/moment/-/moment-2.8.4.tgz",
+ "integrity": "sha1-zBdKq7GSI+//VpmpRngFoniYOL8="
+ }
+ }
+ },
"bootstrap-validator": {
"version": "0.11.9",
"resolved": "https://registry.npmjs.org/bootstrap-validator/-/bootstrap-validator-0.11.9.tgz",
@@ -596,6 +619,51 @@
"assert-plus": "^1.0.0"
}
},
+ "datatables.net": {
+ "version": "1.10.19",
+ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz",
+ "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==",
+ "requires": {
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-bs4": {
+ "version": "1.10.19",
+ "resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.10.19.tgz",
+ "integrity": "sha512-pgeP17w4aPR7HIxIwuJghfqXULjdg1K6xMUUKDyCERJRSNNK4MRToFfELtIsluLNN555YBK4Kx8nihX5/ZT1Fw==",
+ "requires": {
+ "datatables.net": "1.10.19",
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-dt": {
+ "version": "1.10.19",
+ "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.19.tgz",
+ "integrity": "sha512-joFHYjLYvr9VnC9Fx3e+8jtXnQ/fP/mPFWt9p0NhZ3Zm5N0jlYyWhJQbnLkihOLuDcDFMaGdBQSvmIdTVdgGyw==",
+ "requires": {
+ "datatables.net": "1.10.19",
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-responsive": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.3.tgz",
+ "integrity": "sha512-8D6VtZcyuH3FG0Hn5A4LPZQEOX3+HrRFM7HjpmsQc/nQDBbdeBLkJX4Sh/o1nzFTSneuT1Wh/lYZHVPpjcN+Sw==",
+ "requires": {
+ "datatables.net": "^1.10.15",
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-responsive-dt": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/datatables.net-responsive-dt/-/datatables.net-responsive-dt-2.2.3.tgz",
+ "integrity": "sha512-NGxuii+3sWGG150AWmQ5NYCrTaFKUHo6GeizBR8o2Uuy68PnuNrSO27hyLvOYNLHQ9kALT66f/gTaBc2TdznFA==",
+ "requires": {
+ "datatables.net-dt": "^1.10.15",
+ "datatables.net-responsive": "2.2.3",
+ "jquery": ">=1.7"
+ }
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -1289,9 +1357,9 @@
"dev": true
},
"jquery": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz",
- "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c="
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.1.4.tgz",
+ "integrity": "sha1-IoveaYoMYUMdwmMKahVPFYkNIxc="
},
"js-yaml": {
"version": "3.11.0",
@@ -1533,6 +1601,14 @@
"resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
"integrity": "sha1-in93TJWmRVC0x+vUlmg5CPlBnb4="
},
+ "moment-timezone": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.4.1.tgz",
+ "integrity": "sha1-gfWYw61eIs2teWtn7NjYjQ9bqgY=",
+ "requires": {
+ "moment": ">= 2.6.0"
+ }
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
diff --git a/package.json b/package.json
index abeaab4..8e896fc 100644
--- a/package.json
+++ b/package.json
@@ -13,15 +13,18 @@
"auto-launch": "5.0.5",
"bcrypt-nodejs": "0.0.3",
"body-parser": "1.18.2",
+ "bootstrap-datetimepicker-npm": "4.17.37-npm",
"bootstrap-validator": "0.11.9",
"cache": "1.1.2",
+ "datatables.net-bs4": "1.10.19",
+ "datatables.net-responsive-dt": "2.2.3",
"electron-is-dev": "0.3.0",
"electron-log": "2.2.14",
"electron-updater": "2.21.4",
"express": "4.16.2",
"font-awesome": "4.7.0",
"ip": "1.1.5",
- "jquery": "3.2.1",
+ "jquery": "2.1.4",
"jspdf": "1.3.5",
"linq": "3.0.9",
"mfb": "0.12.0",