klnodekb/js/vehicleApi.js

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");
})