273 lines
7.1 KiB
JavaScript
273 lines
7.1 KiB
JavaScript
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');
|
|
const { sendEmail } = require('./mailHelper.js');
|
|
|
|
|
|
exports.apiVehicleSetCity=function(vehicleId,lastCity,rfid_device_id,callback){
|
|
|
|
|
|
let lc={
|
|
timestamp: new Date(),
|
|
city:lastCity,
|
|
rfid_device_id:rfid_device_id
|
|
};
|
|
|
|
|
|
|
|
Vehicle.findByIdAndUpdate(vehicleId,
|
|
{$push:{lastCity: lc}},
|
|
function(error,success)
|
|
{
|
|
callback(error,success);
|
|
}
|
|
)
|
|
|
|
|
|
}
|
|
|
|
exports.apiGetVehicles=asyncHandler(async (req,res)=>{
|
|
|
|
const vehicles=await Vehicle.find();
|
|
const lastkm=0;
|
|
const {name, vehicleId, refueling}=vehicles;
|
|
if (refueling)
|
|
{
|
|
const lastkm=refueling.slice(-1)
|
|
}
|
|
if (vehicles)
|
|
{
|
|
res.status(200).send(vehicles)
|
|
}
|
|
else
|
|
{
|
|
res.status(404).send('Error')
|
|
}
|
|
|
|
})
|
|
|
|
// Jármű adatainak lekérdezése
|
|
exports.apiGetVehicle=asyncHandler(async (req,res)=>{
|
|
|
|
if (isValidObjectId(req.params.id)==false)
|
|
{
|
|
req.flash('error','Nem létező jármű');
|
|
res.redirect('/');
|
|
return;
|
|
}
|
|
|
|
const vehicle=await Vehicle.findById(req.params.id);
|
|
|
|
if (vehicle)
|
|
{
|
|
res.status(200).send(vehicle)
|
|
}
|
|
else
|
|
{
|
|
res.status(404).send('Error')
|
|
}
|
|
|
|
})
|
|
// Módosítás
|
|
exports.apiUpdateVehicle=asyncHandler(async (req,res) => {
|
|
|
|
// Get errors
|
|
if (isValidObjectId(req.params.id)==false)
|
|
{
|
|
//req.flash('error','Nem létező jármű');
|
|
res.status(400).send('Nem Létező Jármű!')
|
|
return;
|
|
}
|
|
|
|
let vehicle={}
|
|
|
|
Vehicle.findByIdAndUpdate(req.params.id,{
|
|
name: req.body.Name,
|
|
persons: req.body.persons,
|
|
vehicle_id: req.body.vehicleId,
|
|
oilChangeInterval: req.body.oilChangeInterval,
|
|
oilChangeLast:req.body.oilChangeLast,
|
|
visible: req.body.visible
|
|
},function(err,docs){
|
|
if (err){
|
|
console.log(err)
|
|
}
|
|
else{
|
|
console.log("Updated Vehicle : ", docs);
|
|
req.flash('success','Jármű sikeresen módosítva');
|
|
console.log('Jármű sikeresen módosítva');
|
|
//res.redirect('/vehicles/view');
|
|
res.status(203).send()
|
|
}
|
|
})
|
|
|
|
});
|
|
// Olajcsere
|
|
exports.apiOilChangeVehicle=asyncHandler(async (req,res) => {
|
|
|
|
// Get errors
|
|
if (isValidObjectId(req.params.id)==false)
|
|
{
|
|
//req.flash('error','Nem létező jármű');
|
|
res.status(400).send('Nem Létező Jármű!')
|
|
return;
|
|
}
|
|
|
|
let vehicle={}
|
|
|
|
Vehicle.findByIdAndUpdate(req.params.id,{
|
|
oilChangeLast: req.body.oilChangeLast
|
|
},function(err,docs){
|
|
if (err){
|
|
console.log(err)
|
|
}
|
|
else{
|
|
console.log("Updated Vehicle : ", docs);
|
|
|
|
console.log('Jármű sikeresen módosítva');
|
|
//res.redirect('/vehicles/view');
|
|
res.status(200).send('Sikeres rögzítés')
|
|
}
|
|
})
|
|
|
|
});
|
|
|
|
|
|
// Közeli dátum
|
|
// az adott dátum előtt nem lehet nagyobb óraállás egyébként return -1
|
|
// az adott dátum után nem lehet kisebb óraállás egyébként return 1
|
|
// return 0 ha minden rendben
|
|
function newFindClosest(dates, tDate, kmcounter) {
|
|
var ret=0;
|
|
var testDate=new Date(Date.parse(tDate));
|
|
var max = dates.length;
|
|
for(var i = 0; i < max; i++) {
|
|
var tar = dates[i].dateTime;
|
|
var arrDate = new Date (tar);//new Date(tar.day_year, tar.day_month, tar.day_number);
|
|
// 3600 * 24 * 1000 = calculating milliseconds to days, for clarity.
|
|
var diff = (arrDate - testDate) / (3600 * 24 * 1000);
|
|
if(diff > 0) { // Ha van későbbi bejegyzés
|
|
if (dates[i].kilometer<=kmcounter)
|
|
{
|
|
ret=1;
|
|
}
|
|
|
|
} else { // Ha van korábbi bejegyzés
|
|
if (dates[i].kilometer>=kmcounter)
|
|
{
|
|
ret=-1;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
// Tankolás mentése
|
|
exports.apiRefuelingById=asyncHandler(async (req,res)=>{
|
|
const {refuelPicker, vehicleId,fueledHUF, kmcounter, fueledqty}=req.body;
|
|
let lastkm=0
|
|
if (isValidObjectId(vehicleId)==false)
|
|
{
|
|
req.flash('error','Nem létező jármű');
|
|
res.redirect('/');
|
|
return;
|
|
}
|
|
const vehicle=await Vehicle.findById(vehicleId);
|
|
const resu=newFindClosest(vehicle.refueling,refuelPicker,kmcounter);
|
|
console.log(resu);
|
|
|
|
if (resu<0){
|
|
req.flash('error','Kilométeróra állás nem lehet kisebb mint az adott időszak legutóbbi állása!');
|
|
res.redirect('/');
|
|
return;
|
|
}
|
|
if (resu>0){
|
|
req.flash('error','Kilométeróra állás nem lehet nagyobb mint az adott időszak legutóbbi állása!');
|
|
res.redirect('/');
|
|
return;
|
|
}
|
|
|
|
const settings=await Settings.find({name:"vehicleEmailNotify"});
|
|
var nextOilChange=vehicle.oilChangeLast+vehicle.oilChangeInterval
|
|
var remainingKilometers=nextOilChange-parseInt(kmcounter);
|
|
|
|
if(nextOilChange<=(parseInt(kmcounter)+5000))
|
|
{
|
|
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)
|
|
{
|
|
lastkm=vehicle.refueling[vehicle.refueling.length-1]
|
|
//console.log(lastkm.kilometer)
|
|
}
|
|
if (lastkm.kilometer>= Number(kmcounter))
|
|
{
|
|
req.flash('error','Kilométeróra állás nem lehet kisebb mint a legutóbbi!');
|
|
res.redirect('/');
|
|
return;
|
|
}*/
|
|
console.log(req.body)
|
|
//res.status(204).send()
|
|
await Vehicle.findByIdAndUpdate(vehicleId,
|
|
{$push:{refueling:{
|
|
dateTime: Date.parse(refuelPicker),
|
|
quantity:fueledqty,
|
|
fueledHUF:fueledHUF,
|
|
kilometer:kmcounter}
|
|
}
|
|
})
|
|
req.flash('success','Sikeres mentés');
|
|
res.redirect('/')
|
|
|
|
})
|
|
// Tankolás adatainak lekérdezése
|
|
exports.apiGetFueling=asyncHandler(async (req,res)=>{
|
|
|
|
if (isValidObjectId(req.params.id)==false)
|
|
{
|
|
req.flash('error','Nem létező jármű');
|
|
res.redirect('/');
|
|
return;
|
|
}
|
|
|
|
const vehicle=await Vehicle.findById(req.params.id);
|
|
|
|
if (vehicle)
|
|
{
|
|
var fueling=[];
|
|
vehicle.refueling.forEach(element => {
|
|
fueling.push({
|
|
id: element._id,
|
|
title:"Tankolás <br /> "+element.quantity+" l "+element.kilometer+" km "+element.fueledHUF+" Ft",
|
|
start:element.dateTime,
|
|
allDay:false
|
|
})
|
|
|
|
});
|
|
|
|
res.status(200).send(fueling)
|
|
}
|
|
else
|
|
{
|
|
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");
|
|
}) |