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