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; // ... }