Compare commits

...

2 Commits

2 changed files with 295 additions and 78 deletions

View File

@ -1037,6 +1037,63 @@ function sendEmailHolidayNotify(employeeName,employeeMail,holiday)
}
});
}
// Szabadság módosítás email kiküldése
function sendEmailHolidayResizeNotify(employeeName,employeeMail,holidayNew,holidayOld)
{
var mailOptions = {
from: emailFelado,// 'munkanyilvantarto@klelectro.hu',
to: employeeMail,
subject: 'Szabadság módosítás.',
text: 'That was easy!'
};
mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága módosításra került az alábbiak szerint.\n\n'+
'Eredeti állapot:\n'+
'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Napok: '+holidayOld.duration+
'Új állapot:\n'+
'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Napok: '+holidayNew.duration;
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
// Szabadság áthelyezés email kiküldése
function sendEmailHolidayDropNotify(employeeName,employeeMail,holidayNew,holidayOld)
{
var mailOptions = {
from: emailFelado,// 'munkanyilvantarto@klelectro.hu',
to: employeeMail,
subject: 'Szabadság áthelyezés.',
text: 'That was easy!'
};
mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága áthelyezésre került az alábbiak szerint.\n\n'+
'Eredeti állapot:\n'+
'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Új állapot:\n'+
'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n';
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
// Regisztrációs email kiküldése
function sendEmailRegisterNotify(employee,visiblePassword)
{
@ -2002,6 +2059,8 @@ router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){
display:'all',
extendedProps: {
employeeId:element._id,
employeeName:element.name,
employeeEmail:element.email,
order:1,
},
}
@ -2021,6 +2080,8 @@ router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){
editable:false,
extendedProps: {
employeeId:element._id,
employeeName:element.name,
employeeEmail:element.email,
order:0,
},
}
@ -2139,20 +2200,31 @@ router.get('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res)
});
// Szabadság módosítása
router.post('/holiday_update', async function(req,res){
router.post('/holiday_resize_update', async function(req,res){
const hd_event=req.body.event;
var a = moment(hd_event.start,'YYYY-MM-DD');
var b = moment(hd_event.end,'YYYY-MM-DD');
//a.diff(b, 'days') // 1
const hdOld_event=req.body.oldEvent;
var c = moment(hdOld_event.start,'YYYY-MM-DD');
var d = moment(hdOld_event.end,'YYYY-MM-DD');
const empId=hd_event.extendedProps.employeeId;
let hd ={
duration: b.diff(a, 'days'), // 1
start_date: a.format('DD.MM.YYYY'),
end_date: b.subtract(1,'days').format('DD.MM.YYYY'),
};
const hdOld ={
duration: d.diff(c, 'days'), // 1
start_date: c.format('DD.MM.YYYY'),
end_date: d.subtract(1,'days').format('DD.MM.YYYY'),
};
const kulombseg=hd.duration-hdOld.duration
const result1=await Employee.findByIdAndUpdate(empId,{ $inc: {'vacationUsed': kulombseg }}, {new: true})
const result=await Employee.updateOne(
{'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id},
{$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}},
@ -2161,7 +2233,52 @@ router.post('/holiday_update', async function(req,res){
{
console.log('Holiday Updated! '+hd_event.id);
res.setHeader('Content-Type', 'application/json');
res.send({'response':'OK','message':'Sikeres módosítás!'});
sendEmailHolidayResizeNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld)
res.status(200).send({'response':'OK','message':'Sikeres módosítás!','vacationUsed':result1.vacationUsed,'vacationLeft':result1.vacationYear-result1.vacationUsed});
}
else
{
console.log('Holiday Failed to Update! '+hd_event.id);
res.setHeader('Content-Type', 'application/json');
res.send({'response':'Fail','message':'Sikertelen Módosítás!'});
}
})
// Szabadság áthelyezése
router.post('/holiday_drop_update', async function(req,res){
const hd_event=req.body.event;
var a = moment(hd_event.start,'YYYY-MM-DD');
var b = moment(hd_event.end,'YYYY-MM-DD');
const hdOld_event=req.body.oldEvent;
var c = moment(hdOld_event.start,'YYYY-MM-DD');
var d = moment(hdOld_event.end,'YYYY-MM-DD');
let hd ={
duration: b.diff(a, 'days'), // 1
start_date: a.format('DD.MM.YYYY'),
end_date: b.subtract(1,'days').format('DD.MM.YYYY'),
};
const hdOld ={
duration: d.diff(c, 'days'), // 1
start_date: c.format('DD.MM.YYYY'),
end_date: d.subtract(1,'days').format('DD.MM.YYYY'),
};
const result=await Employee.updateOne(
{'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id},
{$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}},
)
if (result.ok)
{
console.log('Holiday Updated! '+hd_event.id);
res.setHeader('Content-Type', 'application/json');
sendEmailHolidayDropNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld)
res.status(200).send({'response':'OK','message':'Sikeres módosítás!'});
}
else
@ -2171,7 +2288,7 @@ router.post('/holiday_update', async function(req,res){
res.send({'response':'Fail','message':'Sikertelen Módosítás!'});
}
//console.log('Old event: '+old_event.start+' '+old_event.stop)
})
// Szabadság törlése

View File

@ -4,10 +4,15 @@ block content
- function datesDiff(s,e) { var a=moment(e,'DD-MM-YYYY');var b=moment(s,'DD-MM-YYYY'); return a.diff(b,'days'); };
link(rel='stylesheet', href='https://use.fontawesome.com/releases/v5.6.1/css/all.css', integrity='sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP', crossorigin='anonymous')
link(rel='stylesheet', type='text/css', href='https://unpkg.com/lightpick@latest/css/lightpick.css')
link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/11.14.2/sweetalert2.css" integrity="sha512-TG239kA30BXeGpy+HpJei+qfJcKo8V9HKpe8UWuVdpk49NGUe86EDhmdXkCxMqD5gSlkLLi6YQ9SbNp+yRa9xQ==" crossorigin="anonymous" referrerpolicy="no-referrer")
style(type="text/css").
.mx {
margin: 0 5px;
}
@media print {
.visible-print { display: inherit !important; }
.hidden-print { display: none !important; }
}
#holidayModal.modal(tabindex='-1', role='dialog', aria-labelledby='holidayModalLabel', aria-hidden='true')
form(method='POST',id='holidayForm' action='/employee/holidays_byperson/'+employee._id)
.modal-dialog(role='document', style='width:620px')
@ -70,6 +75,7 @@ block content
script(type='text/javascript', src='/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js')
script(src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js')
script(src='https://unpkg.com/lightpick@latest/lightpick.js')
script(src="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/11.14.2/sweetalert2.min.js" integrity="sha512-nD7/PXl2UD6bAYMJVKTLhr7qwnWVvoyqk8/WMzedDKMiQbaNXT3EUPzLYbLUHCLWqAZoXO37aVCtCKmAxZfqGw==" crossorigin="anonymous" referrerpolicy="no-referrer")
script(src='/js/workingtime.js')
script.
//Szabadság törlése
@ -153,7 +159,8 @@ block content
var calendarEl = document.getElementById('calendar');
var empId = document.getElementById('uid')
const year=+moment().format("YYYY")
var calendar = new FullCalendar.Calendar(calendarEl, {
var calendar = new FullCalendar.Calendar(calendarEl,
{
initialView: 'multiMonthFourMonth',
locale: 'hu',
firstDay: 1,
@ -181,49 +188,142 @@ block content
//events: '/employee/holidays_byperson_calendar/'+empId.textContent+'/'+year,
weekNumbers: true,
themeSystem: 'default',
eventClick: function(info) {
eventClick: function(info)
{
//alert('Event: ' + info.event.title+'\n'+info.event.id+'\n'+info.event.extendedProps.employeeId);
console.log('Event: ' + info.event.title+'\n'+info.event.id+'\n'+info.event.extendedProps.employeeId)
// change the border color just for fun
info.el.style.borderColor = 'red';
},
eventDrop: async function( eventDropInfo ) {
if (!confirm("Biztosan végrehajtja a módosítást?\n\nA változásról "+eventDropInfo.event.title+" e-mail értesítést fog kapni."))
eventDrop: async function( eventDropInfo )
{
eventDropInfo.revert();
const result= await Swal.fire(
{
title: "Biztosan végrehajtja a módosítást?",
text: "A változásról "+eventDropInfo.event.title+" e-mail értesítést fog kapni.",
icon: "question",
showDenyButton: true,
confirmButtonText: 'Igen',
denyButtonText: 'Nem',
customClass: {
actions: 'my-actions',
confirmButton: 'order-2',
denyButton: 'order-3',
},
}
else
);
if (result.isConfirmed)
{
console.log("Event ID: "+eventDropInfo.event.id)
console.log("Event Before Drop\n"+eventDropInfo.oldEvent.start+'-'+eventDropInfo.oldEvent.end)
console.log("Event After Drop\n"+eventDropInfo.event.start+'-'+eventDropInfo.event.end)
const response = await fetch("/employee/holiday_update", {
const response = await fetch("/employee/holiday_drop_update",
{
headers: {
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({ event: eventDropInfo.event }),
body: JSON.stringify({ event: eventDropInfo.event,oldEvent: eventDropInfo.oldEvent }),
});
if (!response.ok) {
//throw new Error(`HTTP error! Status: ${response.status}`);
alert(`HTTP error! Status: ${response.status}`)
}
if (response.response="OK")
const data = await response.json();
if (!response.ok)
{
alert("Sikeres Módosítás!")
Swal.fire('Error', '', 'error')
}
}
},
eventResize:function( eventResizeInfo ) {
if (!confirm("Biztosan végrehajtja a módosítást?\n\nA változásról "+eventResizeInfo.event.title+" e-mail értesítést fog kapni."))
if (data.response="OK")
{
eventResizeInfo.revert();
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500
});
//Swal.fire('Saved!', '', 'success')
}
}
else
if (result.isDenied)
{
//Swal.fire('Changes are not saved', '', 'info')
Swal.fire({
position: "top-end",
icon: "info",
title: 'Nem történt változtatás',
showConfirmButton: false,
timer: 1500
});
eventDropInfo.revert();
}
},
eventResize: async function( eventResizeInfo ) {
const result= await Swal.fire(
{
title: "Biztosan végrehajtja a módosítást?",
text: "A változásról "+eventResizeInfo.event.title+" e-mail értesítést fog kapni.",
icon: "question",
showDenyButton: true,
confirmButtonText: 'Igen',
denyButtonText: 'Nem',
customClass: {
actions: 'my-actions',
confirmButton: 'order-2',
denyButton: 'order-3',
},
}
);
if (result.isConfirmed)
{
console.log("Event ID: "+eventResizeInfo.event.id)
console.log("Event Before Drop\n"+eventResizeInfo.oldEvent.start+'-'+eventResizeInfo.oldEvent.end)
console.log("Event After Drop\n"+eventResizeInfo.event.start+'-'+eventResizeInfo.event.end)
const response = await fetch("/employee/holiday_resize_update",
{
headers: {
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({ event: eventResizeInfo.event,oldEvent: eventResizeInfo.oldEvent }),
});
const data = await response.json();
if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="OK")
{
var vacationUsed = document.querySelector('input[name="vacationUsed"]');
var vacationLeft = document.querySelector('input[name="vacationLeft"]');
vacationUsed.value=data.vacationUsed;
vacationLeft.value=data.vacationLeft;
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500
});
//Swal.fire('Saved!', '', 'success')
}
}
else
if (result.isDenied)
{
//Swal.fire('Changes are not saved', '', 'info')
Swal.fire({
position: "top-end",
icon: "info",
title: 'Nem történt változtatás',
showConfirmButton: false,
timer: 1500
});
eventDropInfo.revert();
}
},
// ÉV választás