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 // Regisztrációs email kiküldése
function sendEmailRegisterNotify(employee,visiblePassword) function sendEmailRegisterNotify(employee,visiblePassword)
{ {
@ -2002,6 +2059,8 @@ router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){
display:'all', display:'all',
extendedProps: { extendedProps: {
employeeId:element._id, employeeId:element._id,
employeeName:element.name,
employeeEmail:element.email,
order:1, order:1,
}, },
} }
@ -2021,6 +2080,8 @@ router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){
editable:false, editable:false,
extendedProps: { extendedProps: {
employeeId:element._id, employeeId:element._id,
employeeName:element.name,
employeeEmail:element.email,
order:0, order:0,
}, },
} }
@ -2139,20 +2200,75 @@ router.get('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res)
}); });
// Szabadság módosítása // 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; const hd_event=req.body.event;
var a = moment(hd_event.start,'YYYY-MM-DD'); var a = moment(hd_event.start,'YYYY-MM-DD');
var b = moment(hd_event.end,'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 ={ let hd ={
duration: b.diff(a, 'days'), // 1 duration: b.diff(a, 'days'), // 1
start_date: a.format('DD.MM.YYYY'), start_date: a.format('DD.MM.YYYY'),
end_date: b.subtract(1,'days').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}},
)
if (result.ok)
{
console.log('Holiday Updated! '+hd_event.id);
res.setHeader('Content-Type', 'application/json');
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( const result=await Employee.updateOne(
{'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id}, {'_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}}, {$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}},
@ -2161,7 +2277,8 @@ router.post('/holiday_update', async function(req,res){
{ {
console.log('Holiday Updated! '+hd_event.id); console.log('Holiday Updated! '+hd_event.id);
res.setHeader('Content-Type', 'application/json'); res.setHeader('Content-Type', 'application/json');
res.send({'response':'OK','message':'Sikeres módosítás!'}); sendEmailHolidayDropNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld)
res.status(200).send({'response':'OK','message':'Sikeres módosítás!'});
} }
else else
@ -2171,7 +2288,7 @@ router.post('/holiday_update', async function(req,res){
res.send({'response':'Fail','message':'Sikertelen Módosítás!'}); 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 // 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'); }; - 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', 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', 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"). style(type="text/css").
.mx { .mx {
margin: 0 5px; 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') #holidayModal.modal(tabindex='-1', role='dialog', aria-labelledby='holidayModalLabel', aria-hidden='true')
form(method='POST',id='holidayForm' action='/employee/holidays_byperson/'+employee._id) form(method='POST',id='holidayForm' action='/employee/holidays_byperson/'+employee._id)
.modal-dialog(role='document', style='width:620px') .modal-dialog(role='document', style='width:620px')
@ -69,7 +74,8 @@ block content
script(src='/bower_components/moment/min/moment-with-locales.js') script(src='/bower_components/moment/min/moment-with-locales.js')
script(type='text/javascript', src='/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js') 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://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://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(src='/js/workingtime.js')
script. script.
//Szabadság törlése //Szabadság törlése
@ -153,78 +159,172 @@ block content
var calendarEl = document.getElementById('calendar'); var calendarEl = document.getElementById('calendar');
var empId = document.getElementById('uid') var empId = document.getElementById('uid')
const year=+moment().format("YYYY") const year=+moment().format("YYYY")
var calendar = new FullCalendar.Calendar(calendarEl, { var calendar = new FullCalendar.Calendar(calendarEl,
initialView: 'multiMonthFourMonth', {
locale: 'hu', initialView: 'multiMonthFourMonth',
firstDay: 1, locale: 'hu',
initialDate: '2024-01-01', firstDay: 1,
height: 'auto', initialDate: '2024-01-01',
//eventLimit: true, height: 'auto',
eventOrder: '-order', //eventLimit: true,
showNonCurrentDates:false, eventOrder: '-order',
//dayMaxEvents: 10, showNonCurrentDates:false,
//dayMaxEventRows: 10, //dayMaxEvents: 10,
nextDayThreshold: "01:00:00", //dayMaxEventRows: 10,
displayEventTime: false, nextDayThreshold: "01:00:00",
editable: true, displayEventTime: false,
eventStartEditable:true, editable: true,
eventDurationEditable:true, eventStartEditable:true,
views: { eventDurationEditable:true,
multiMonthFourMonth: { views: {
type: 'multiMonth', multiMonthFourMonth: {
duration: { months: 12 }, type: 'multiMonth',
multiMonthMaxColumns: 2, duration: { months: 12 },
eventLimit: 10, multiMonthMaxColumns: 2,
} eventLimit: 10,
},
//initialEvents: res,
//events: '/employee/holidays_byperson_calendar/'+empId.textContent+'/'+year,
weekNumbers: true,
themeSystem: 'default',
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."))
{
eventDropInfo.revert();
}
else
{
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", {
headers: {
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({ event: eventDropInfo.event }),
});
if (!response.ok) {
//throw new Error(`HTTP error! Status: ${response.status}`);
alert(`HTTP error! Status: ${response.status}`)
}
if (response.response="OK")
{
alert("Sikeres Módosítás!")
}
} }
}, },
eventResize:function( eventResizeInfo ) { //initialEvents: res,
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.")) //events: '/employee/holidays_byperson_calendar/'+empId.textContent+'/'+year,
{ weekNumbers: true,
eventResizeInfo.revert(); themeSystem: 'default',
} eventClick: function(info)
else {
{ //alert('Event: ' + info.event.title+'\n'+info.event.id+'\n'+info.event.extendedProps.employeeId);
console.log("Event Before Drop\n"+eventResizeInfo.oldEvent.start+'-'+eventResizeInfo.oldEvent.end) console.log('Event: ' + info.event.title+'\n'+info.event.id+'\n'+info.event.extendedProps.employeeId)
console.log("Event After Drop\n"+eventResizeInfo.event.start+'-'+eventResizeInfo.event.end)
} // change the border color just for fun
info.el.style.borderColor = 'red';
},
eventDrop: async function( eventDropInfo )
{
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',
},
}
);
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_drop_update",
{
headers: {
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({ event: eventDropInfo.event,oldEvent: eventDropInfo.oldEvent }),
});
const data = await response.json();
if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="OK")
{
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 // ÉV választás
datesSet: async function (info) { datesSet: async function (info) {