Olajcsere Email értesítő hozzáadva

This commit is contained in:
Vincze József 2023-10-17 12:41:48 +02:00
parent 2f7c091524
commit a75ab72512
11 changed files with 253 additions and 20 deletions

View File

@ -1,4 +1,6 @@
let Vehicle = require('../models/vehicle.js');
let Settings = require('../models/settings.js');
var mongoose = require('mongoose');
const asyncHandler = require('express-async-handler');
const moment = require('moment');
const { isValidObjectId } = require('mongoose');
@ -188,11 +190,14 @@ exports.apiRefuelingById=asyncHandler(async (req,res)=>{
res.redirect('/');
return;
}
const settings=await Settings.find({name:"vehicleEmailNotify"});
var nextOilChange=vehicle.oilChangeLast+vehicle.oilChangeInterval
var remainingKilometers=nextOilChange-parseInt(kmcounter);
if(nextOilChange<=(kmcounter+5000))
if(nextOilChange<=(parseInt(kmcounter)+5000))
{
sendEmail("v.joszef@gmail.com","Szervíz esedékesség "+vehicle.vehicle_id,"Tisztelt Címzett!\n\nA(z) "+vehicle.vehicle_id+" rendszámú "+vehicle.name+" jármű olajcseréje esedékessé válik "+remainingKilometers+" km múlva!")
sendEmail(settings[0].value,"Szervíz esedékesség "+vehicle.vehicle_id,"Tisztelt Címzett!\n\nA(z) "+vehicle.vehicle_id+" rendszámú "+vehicle.name+" jármű olajcseréje esedékessé válik "+remainingKilometers+" km múlva!")
}
/* if (vehicle.refueling)
{
@ -251,4 +256,18 @@ exports.apiGetFueling=asyncHandler(async (req,res)=>{
res.status(404).send('Error')
}
})
})
// Beállítások olvasása
exports.apiGetSettings=asyncHandler(async(req,res)=>{
const {keyName}=req.params
const settings=await Settings.find({name:keyName});
res.status(200).send(settings);
})
// Beállítások írása
exports.apiUpdateSettings=asyncHandler(async(req,res)=>{
const {keyName,vehicleEmailNotification}=req.body;
await Settings.findOneAndUpdate({name:keyName},{value:vehicleEmailNotification},{new:true,upsert:true})
res.status(200).send("OK");
})

15
models/settings.js Normal file
View File

@ -0,0 +1,15 @@
let mongoose = require('mongoose');
// Settings Schema
let SettingsSchema = mongoose.Schema({
// Vehicle Settings
name: {type: String, require:true},
value:{
type: String,
require: true
}
});
var Settings = module.exports = mongoose.model('Settings', SettingsSchema);

View File

@ -5,7 +5,7 @@ const moment = require('moment');
var utils = require('../js/utils');
let Vehicle = require('../models/vehicle.js');
const fullCalendar=require('../node_modules/fullcalendar');
const { apiGetVehicles, apiRefuelingById, apiGetVehicle, apiUpdateVehicle, apiOilChangeVehicle, apiGetFueling } = require('../js/vehicleApi');
const { apiGetVehicles, apiRefuelingById, apiGetVehicle, apiUpdateVehicle, apiOilChangeVehicle, apiGetFueling, apiGetSettings, apiUpdateSettings } = require('../js/vehicleApi');
router.route('/api/getVehicles').get(apiGetVehicles);
@ -14,6 +14,8 @@ router.route('/api/fueling/:id').get(apiGetFueling);
router.route('/api/getVehicle/:id').get(apiGetVehicle);
router.route('/api/updateVehicle/:id').post(apiUpdateVehicle);
router.route('/api/oilchangeVehicle/:id').post(apiOilChangeVehicle);
router.route('/api/settings/:keyName').get(apiGetSettings);
router.route('/api/settings').post(apiUpdateSettings);
// Edit Vehicle
router.get('/edit/:id', utils.ensureAuthenticated,function (req,res) {
Vehicle.findById(req.params.id, function(err,vehicle)

View File

@ -65,6 +65,9 @@ html
if user.isAdmin || user.canAccess.invoices
li
a(href='/employee/accesslist') Munkavállalók
if user.isAdmin || user.canAccess.invoices
li
a(href='/vehicles/view') Járművek
if user.isAdmin
li.dropdown
a.dropdown-toggle(href='#', data-toggle='dropdown', role='button', aria-haspopup='true', aria-expanded='false')

View File

@ -62,18 +62,6 @@ html
a(id="7",href='/devicesrfid/new') Új RFID eszköz
li#listrfiddevice
a(id="8",href='/devicesrfid/list') RFID Eszközök
li#vehicle.collapsed(data-toggle='collapse', data-target='#vehicles')
a(id="9",href='#')
i.fa.fa-car.fa-lg
| Járművek
span.arrow
ul#vehicles.sub-menu.collapse(data-id='vehicles')
li#vehiclenew
a(id="10",href='/vehicles/new') Új jármű
li#vehiclelistAll
a(id="11",href='/vehicles/viewAll') Összes jármű
li#vehiclelist
a(id="11",href='/vehicles/view') Járművek
li
a(id="12",href='/')
i.glyphicon.glyphicon-arrow-left

153
views/layout_vehicles.pug Normal file
View File

@ -0,0 +1,153 @@
doctype html
html
head
title Munka nyílvántartó
script(type='text/javascript', src='/bower_components/jquery/dist/jquery.min.js')
script(src='/bower_components/bootstrap/dist/js/bootstrap.js')
link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.css')
//link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css', integrity='sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO', crossorigin='anonymous')
link(href='//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', rel='stylesheet')
//script(type='text/javascript', src='/bower_components/jquery/dist/jquery.min.js')
link(rel='stylesheet', href='/bower_components/bootstrap/dist/css/bootstrap.min.css')
link(rel='stylesheet', href='/bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css')
link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css')
//script(src='https://code.jquery.com/jquery-3.3.1.slim.min.js', integrity='sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo', crossorigin='anonymous')
script(src='https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js', integrity='sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49', crossorigin='anonymous')
//script(src='https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js', integrity='sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy', crossorigin='anonymous')
//link(rel='stylesheet' href='/css/style.css')
//link(rel='stylesheet' href='/css/switch.css')
//link(rel='stylesheet' href='/css/switchsmall.css')
//link(rel='stylesheet' href='/css/checkmark.css')
link(rel='stylesheet' href='/css/table.css')
link(rel='stylesheet', href='/css/sidebar.css')
link(rel='stylesheet' href='/bower_components/jquery-typeahead/dist/jquery.typeahead.min.css')
link(rel='stylesheet' href='/css/darktable.css')
link(rel='stylesheet' href='/css/infopanel.css')
style.
div.a {
text-indent: 50px;
}
body
nav.nav-side-menu
.brand
img(src='/IO_technic_LogoFull_I.png', width='150', alt='')
i.fa.fa-bars.fa-2x.toggle-btn(data-toggle='collapse', data-target='#menu-content')
#ml.menu-list
ul#menu-content.menu-content.collapse.out
li#vehicle.collapsed(data-toggle='collapse', data-target='#vehicles')
a(id="9",href='#')
i.fa.fa-car.fa-lg
| Járművek
span.arrow
ul#vehicles.sub-menu.collapse(data-id='vehicles')
li#vehiclenew
a(id="10",href='/vehicles/new') Új jármű
li#vehiclelist
a(id="11",href='/vehicles/view') Járművek
li#vehiclelistAll
a(id="12",href='/vehicles/viewAll') Összes jármű
if user.isAdmin
ul#menu-content.menu-content.collapse.out
li#vehicle.collapsed(data-toggle='collapse', data-target='#vehicleSettings')
a(id="2",href='#')
i.fa.fa-gear
| Beállítások
span.arrow
ul#vehicleSettings.sub-menu.collapse(data-id='vehicleSettings')
li#vehiclenew
a(id="20",data-toggle='modal', data-target='#settingsModal') Értesítések
li
a(id="12",href='/')
i.glyphicon.glyphicon-arrow-left
| Vissza
li#printBtn.hide
//a(href='/invoices/print')
a#print(href='#' data-value= mode)
i.fa.fa-print.fa-lg
| Nyomtatás
.container.alert-fixed#msg
!= messages('message', locals)
if errors
each error, i in errors
div(class="alert alert-danger") #{error.msg}
.container(style='padding-left:300px;width:100%;')
block content
br
hr
footer
p(style='margin-left:10px;') IO-Technic Hungary Copyright &copy; 2018
//#picsa
script(type='text/javascript',src='/bower_components/jquery/dist/jquery.js')
script(type='text/javascript',src='/js/datepicker.js')
//script(src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js')
script(type='text/javascript', src='/bower_components/moment/min/moment.min.js')
script(src='/bower_components/moment/min/moment-with-locales.js')
//script(type='text/javascript', src='/bower_components/bootstrap/dist/js/bootstrap.min.js')
script(type='text/javascript', src='/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js')
//script(type='text/javascript',src='/js/invoice.js')
//script(type='text/javascript',src='/js/datepicker.js')
script(src='https://cdn.jsdelivr.net/npm/fullcalendar/index.global.min.js')
script(type='text/javascript',src='/build/pdfmake.js')
script(type='text/javascript',src='/build/vfs_fonts.js')
script.
window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\\/script>')
// Get current page and set current in nav
$(document).ready(function(){
// outer scope
var phrases = [];
$('#menu-content ul').each(function(idx,ml){
// inner scope
var menuId = $(this).attr('id');//$(this).attr("id");
// var menuState = $(this).is( ":visible" );
// console.log(menuState);
//console.log(menuId);
if(localStorage.getItem(menuId))
{
$(this).addClass('collapse in');
$(this).removeClass('collapse');
$(this).attr("aria-expanded","true");
}
else
{
$(this).removeClass('collapse in');
$(this).addClass('collapse');
$(this).attr("aria-expanded","false");
}
});
//console.log(phrases)
$("#msg").delay(3000).slideUp(300);
})
$('#ml li').on('click',function(e){
$('#menu-content ul').each(function(idx,ml){
// inner scope
var menuId = $(this).attr('id');
var menuState = $(this).is( ":visible" );
// console.log(menuId);
// console.log(localStorage.getItem(menuId));
localStorage.setItem(menuId ,menuState);
//$(this).addClass('collapsed in');
});
// var menuId = $(this).attr('id');//$(this).attr("id");
// var menuState = this.getAttribute('aria-expanded')
// console.log();
// console.log($('#ml li').hasClass('show'));
})

41
views/modal_settings.pug Normal file
View File

@ -0,0 +1,41 @@
#settingsModal.modal(tabindex='-1', role='dialog', aria-labelledby='settingsModalLabel', aria-hidden='true')
//-form(method='GET',id='holidayForm' action='/employee/holidays_byperson/')
.modal-dialog(role='document', style='width:1000px')
.modal-content
.modal-header.bg-primary(style="background: Primary")
h4 Értesítési beállítások
.modal-body
.form-group
label.form-label(for='emailList') Megnevezés:
input#emailList.form-control(name='emailList',type=text, autofocus,tabindex='1', readonly=false,width='1000')
br
.modal-footer
button.btn.btn-primary(type='button', data-dismiss='modal')
i.fa.fa-arrow-left
| | Bezár
button#settingsSave.btn.btn-primary(type='button' )
i.fa.fa-save
| | Mentés
script.
$('#settingsModal').on('show.bs.modal', function () {
$.get('/vehicles/api/settings/vehicleEmailNotify',function(data)
{
if (data)
{
$('#emailList').val(data[0].value);
}
})
})
// Mentés
$( "#settingsSave" ).click(function() {
var vehicleEmailNotification=$('#emailList').val()
$.post( "/vehicles/api/settings", { keyName:"vehicleEmailNotify",vehicleEmailNotification: vehicleEmailNotification})
.done(function( data ) {
$('.modal-backdrop').remove()
$('#vehicleEditModal').hide();
}).fail(function(xhr,status,error){
alert( "Data Loaded: " + xhr.responseText );
})
});

View File

@ -1,4 +1,4 @@
extends layout_side
extends layout_vehicles
block content
link(rel='stylesheet' href='/bower_components/jquery-typeahead/dist/jquery.typeahead.min.css')

View File

@ -1,4 +1,4 @@
extends layout_side
extends layout_vehicles
block content
.container

View File

@ -1,4 +1,4 @@
extends layout_side
extends layout_vehicles
block content
.container

View File

@ -1,4 +1,4 @@
extends layout_side
extends layout_vehicles
block content
style.
@ -16,6 +16,7 @@ block content
link(href='/bower_components/bootstrap-toggle/css/bootstrap-toggle.min.css', rel='stylesheet', type='text/css')
link(href='https://cdn.jsdelivr.net/gh/gitbrent/bootstrap-switch-button@1.1.0/css/bootstrap-switch-button.min.css' rel='stylesheet')
//-link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css')
include modal_settings
#vehicleModal.modal(tabindex='-1', role='dialog', aria-labelledby='vehicleModalLabel', aria-hidden='true')
//-form(method='GET',id='holidayForm' action='/employee/holidays_byperson/')
.modal-dialog(role='document', style='width:720px')
@ -181,8 +182,19 @@ block content
script(src='https://cdn.jsdelivr.net/gh/gitbrent/bootstrap-switch-button@1.1.0/dist/bootstrap-switch-button.min.js')
script.
// $(document).ready(function () {
// Get current page name
const currentUrl = window.location.href;
var page = currentUrl.split("/").pop();
if (page==='viewAll')
{
$("#vehicle").addClass("collapse in")
$("#vehiclelistAll").addClass("active");
}
if (page==='view')
{
$("#vehicle").addClass("collapse in")
$("#vehiclelist").addClass("active");
}
function isNumber(str) {
if (typeof str != "string") return false // we only process strings!
const ret= !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...