klnodekb/print/printAccessDetailsEmp.js

342 lines
13 KiB
JavaScript

const moment = require('moment');
// Nyomtatási kép generálás alkalmazottak
// Segéd funkciók
function convertMinsToHrsMins(minutes) {
var h = Math.floor(minutes / 60);
var m = minutes % 60;
h = h < 10 ? '0' + h : h;
m = m < 10 ? '0' + m : m;
return h + ':' + m;
}
function convertMinsToHrsMins_R(minutes) {
var h = Math.floor(minutes / 60);
var m = minutes % 60;
if (m>=30) {
h+=1;
}
h = h < 10 ? '0' + h : h;
//m = m < 10 ? '0' + m : m;
return h;// + ':' + m;
}
exports.printPage=function(employee,som,month,weekend,mindate,holidaysArray,sickpaysArray,msz)
{
var dt = new Date();
var item=[];
var i=1;
var namePostfix="";
var drShift="";
// Munkaszüneti napok ellenőrzése és kijelzése
//var msz=getMunkaszunet(mindate);
moment.locale('hu');
if (employee.isStudent==='on') namePostfix='Diák';
som.sort(function(a, b) {
return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD');
});
item.push(['Dátum', //{text:'Nap', alignment: 'rleft'},
{text:'Helyszín', alignment: 'center'},
{text:'Érkezés', alignment: 'center'},
{text:'Távozás', alignment: 'center'},
{text:'Órák', alignment: 'center'},
{text:'Ebéd', alignment: 'center'},
{text:'Elszámolt', alignment: 'center'},
{text:'Túlóra', alignment: 'center'},
{text:'Pótlék', alignment: 'center'},
'Megjegyzés']);
som.forEach(element => {
var arrives="";
var getaways="";
var locs="";
var dreportList='';
var workReport='';
var locShift='';
var wrShift='';
var date = moment(element.date,'YYYY.MM.DD. HH:mm').format('DD')+' '+moment(element.date,'YYYY.MM.DD. HH:mm').format('dd').toUpperCase();
var notes="";
//if (element.dailyReport!='') drShift='\r\n'; else drShift='';
drShift='';
if (element.dailyReport)
{
if (element.dailyReport.length)
{
//drShift='\r\n';
locShift='\r\n'
}
element.dailyReport.forEach(drelem=>{
dreportList+= drelem.name.substring(0,60);
if (element.dailyReport.length>1) dreportList+='\r\n'
drShift+='\r\n';
})
}
else
{
drShift='';
}
if (element.isHoliday==false || element.isSickpay==false || element.isMunkaszunet==false)
// else
{
if (element.workReport){
locShift='\r\n'
//if (Object.keys(element.workReport).length!=0){
if (Object.entries(element.workReport).length)
{
workReport='M: '+element.workReport.wt+' '+element.workReport.wf;
workReport=workReport.substring(0,60);
wrShift='\r\n'
}
}
element.notes.forEach(note=>{
notes+=note.userNote+' '+note.companyNote
})
if (element.isWeekend)
{
// Hétvége
element.startStop.forEach(interval=>{
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
if (interval.stop==='-')
{
getaways+='-\r\n';
}
else
{
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
}
})
item.push([
{text:date, style:'tableDataWe'},
{text:dreportList+workReport+locShift+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+arrives, style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+getaways, style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.fullHours), style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.lunchtime), style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'}, //Elszámolt
{text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.Surrogate), style:'tableDataWe', alignment: 'center'}, //Pótlék
{text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
}
else
{
// Hétköznap
element.startStop.forEach(interval=>{
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
if (interval.stop==='-')
{
getaways+='-\r\n';
}
else
{
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
}
})
element.locations.forEach(interval=>{
locs+=interval.arriveLoc+' - '+interval.getawayLoc+"\r\n";
})
item.push([
{text:date, style:'tableData'},
[{text:dreportList+workReport, style:'dailyReport'},{text:locs, style:'tableDataLoc', alignment: 'center'}],
{text:drShift+wrShift+arrives, style:'tableData', alignment: 'center'},
{text:drShift+wrShift+getaways, style:'tableData', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.fullHours), style:'tableData', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.lunchtime), style:'tableData', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'}, //Elszámolt
{text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'},
{text:drShift+wrShift+convertMinsToHrsMins(element.Surrogate), style:'tableData', alignment: 'center'}, //Pótlék
{text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
}
}else{
if (element.isHoliday || element.isSickpay || element.isMunkaszunet)
{
var txt='';
var st='';
if (element.isHoliday) {txt='Szabadság';st='tableDataHo';}
if (element.isSickpay) {txt='Táppénz';st='tableDataSp';}
if (element.isMunkaszunet) {txt='Ünnep';st='tableDataHo';}
item.push([
{text:date, style:st},
{text:' --- ', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text:'--:--', style:st, alignment: 'center'},
{text: txt, style:st, alignment: 'left'}]);
}
}
return
});
item.push([
{text:'Összesen:', style:'tableSum',colSpan: 6},
// {text:'', style:'tableSum'},
{text:'', style:'tableSum'},
{text:'', style:'tableSum'},
{text:'', style:'tableSum'},
{text:'', style:'tableSum'},
{text:'', style:'tableSum'},
{text: convertMinsToHrsMins(month.workHours), style:'tableSum', alignment: 'center'},
{text: convertMinsToHrsMins(month.overTime), style:'tableSum', alignment: 'center'},
{text: convertMinsToHrsMins(weekend.Saturday.Surrogate+weekend.Sunday.Surrogate), style:'tableSum', alignment: 'center'},
{text:'', style:'tableSum'},
])
// playground requires you to assign document definition to a variable called dd
if (employee.isSubcontractor==='on') employee.name+=" Alvállalkozó"
if (employee.isStudent==='on') employee.name+=" Tanuló"
var dd = {
pageOrientation: 'landscape',
footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}},
header: {
alignment: 'justify',
columns: [
{text: 'Jelenléti ív '+employee.name+' '+namePostfix, style: 'header',margin: [ 20, 10, 10, 20 ],width: '*'},
{text: mindate, style: 'datum',margin: [ 5, 10, 20, 20 ],width: '*'}
]
},
content: [
{
style: 'tableExample',
table: {
headerRows: 1,
widths: ['auto', 'auto','auto','auto','auto','auto','auto','auto','auto','*'],
body: [],
}
},
{
stack:[
{alignment: 'justify', columnGap: 10,
columns:[
{style: 'subheader',width: 'auto',alignment: 'left',margin: [ 5, 2, 0, 5 ],text: 'Ledolgozott órák:\n'+
'Túlórák:\n'+
'Hétvégi pótlékok:' },
{style: 'subheader',width: 'auto',alignment: 'right',margin: [ 5, 2, 0, 5 ],text: `${convertMinsToHrsMins(month.workHours)} óra\n${convertMinsToHrsMins(month.overTime)} óra\n${convertMinsToHrsMins(weekend.Saturday.Surrogate+weekend.Sunday.Surrogate)} óra\n`}
]},
{alignment: 'justify',
columns:[
{style: 'subheader',width: 'auto',alignment: 'left',margin: [ 5, 2, 0, 5 ],text: 'Kiadott szabadság:\n'+
'Táppénz:\n'+
'Munkaszüneti napok:'},
{style: 'subheader',width: '*',alignment: 'left',margin: [ 5, 2, 0, 5 ],text: `${holidaysArray.length} nap\n${month.sickPays} nap\n${msz.length} nap (${msz})\n`}
]},
],
unbreakable: true,
id:'signature'
}
],
pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) {
//check if signature part is completely on the last page, add pagebreak if not
if (currentNode.id === 'signature' && (currentNode.pageNumbers.length != 1 || currentNode.pageNumbers[0] != currentNode.pages)) {
return true;
}
//check if last paragraph is entirely on a single page, add pagebreak if not
else if (currentNode.id === 'closingParagraph' && currentNode.pageNumbers.length != 1) {
return true;
}
return false;
},
styles: {
header: {
fontSize: 18,
bold: true,
fillColor: '#eeeeee',
margin: [0, 0, 0, 10]
},
dailyReport: {
fontSize: 8,
bold: true,
fillColor: '#494',
alignment: 'center'
},
datum: {
fontSize: 18,
bold: true,
fillColor: '#eeeeee',
alignment: 'right'
},
subheader: {
fontSize: 14,
bold: true,
fillColor: '#eeeeee',
margin: [0, 10, 0, 5]
},
tableExample: {
margin: [0, 5, 0, 15]
},
tableHeader: {
bold: true,
fontSize: 10,
fillColor: '#eeeeee',
color: 'red'
},
tableData: {
bold: false,
fontSize: 10,
italics: true,
color: 'green'
},
tableSum: {
bold: true,
fontSize: 10,
italics: true,
fillColor: '#ddddff',
color: 'black'
},
tableDataLoc: {
bold: false,
fontSize: 8,
italics: true,
color: 'green'
},
tableDataWe: {
bold: false,
fontSize: 10,
italics: true,
fillColor: '#eeffee',
color: 'red'
},
tableDataHo: {
bold: false,
fontSize: 10,
italics: true,
fillColor: '#eeeeff',
color: 'red'
},
tableDataSp: {
bold: false,
fontSize: 10,
italics: true,
fillColor: '#eeeeee',
color: 'brown'
}
},
defaultStyle: {
// alignment: 'justify'
}
};
dd.content[0].table.body=item;
//pdf.createPdf(dd).open();
// callback(null,dd);
return dd;
// ...
}