diff --git a/app.js b/app.js
index 4d90e2a..634ecca 100644
--- a/app.js
+++ b/app.js
@@ -25,6 +25,7 @@ var PdfPrinter=require('pdfmake');
//var currentWorkNumber=0;
const { XMLParser, XMLBuilder, XMLValidator} = require("fast-xml-parser/src/fxp");
const { apiSaveReport, apiGetReport, apiGetReportList, apiGetUsers, apiGetReportDates, apiUpdateReport } = require('./js/workReport.js');
+let WorkReport = require('./models/workReportModel');
moment.locale('HU');
const fss = require('fs');
global.currentWorkNumber=0;
@@ -549,7 +550,7 @@ app.post('/apiPostDailyReport/:apiKey',function(req,res){
// Munka lista lekérése és szűrése AJAX CALL
-app.get('/filter', utils.ensureAuthenticated, function(req, res) {
+app.get('/filter', utils.ensureAuthenticated, async function(req, res) {
//console.log(req.query.year.value);
var query={
@@ -569,20 +570,60 @@ app.get('/filter', utils.ensureAuthenticated, function(req, res) {
]
};
- Work.find(query,null,{sort: {workNumber: -1}} ,function(err, works){
- if (err)
+ var works=await Work.find(query,null,{sort: {workNumber: -1}})// ,function(err, works){
+ if (!works)
{
console.log('ERR:'+err);
}
- else {
+
+ var workrReportCount= await WorkReport.aggregate(
+ [
+ {$unwind: '$workFlow'},
+ {"$project":
+ {
+ "_id":"$workFlow._id",
+ "wid":"$workId",
+ "el":"$workFlow.employeeList",
+ "count": {$size:"$workFlow.employeeList"},
+ }
+ },
+ {
+ $group: {
+ _id: '$wid',
+ 'workName': {$push:'$count'}
+ }
+ },{
+ $project: {
+ total: {
+ $reduce: {
+ input: "$workName",
+ initialValue: 0,
+ in: { $add: ["$$value", "$$this"] }
+ }
+ }
+ }
+ }
+
+ ]
+ )
// Server side table generation
var drCount='';
+ var wrCount='';
var tr='';
works.forEach((work,index,array) =>{
var dr=work.dailyReport;
var wc=0;
var etemp="
| ";
+ var wrc=findById(workrReportCount,work._id)
+ if (wrc)
+ {
+ work.wrc=wrc.total*8
+ }
+ else
+ {
+ work.wrc=0;
+ }
dr.forEach((el,index,arr)=>{
wc+=el.employeeList.length;
});
@@ -595,9 +636,9 @@ app.get('/filter', utils.ensureAuthenticated, function(req, res) {
if (work.poNumber!=undefined)
po=work.poNumber;
if (work.state==='Opened')
- state="Folyamatban";
+ state=' | ';
else
- state="Lezárva";
+ state=' | '
if (work.enaploTemplate)
{
etemp=' ';
@@ -606,22 +647,28 @@ app.get('/filter', utils.ensureAuthenticated, function(req, res) {
drCount= ' | ' + work.wc+' | ';
else
drCount='' + work.wc+' | ';
+ if (work.wrc>0)
+ wrCount= '' + work.wrc+' | ';
+ else
+ wrCount='' + work.wrc+' | ';
+
tr+='| '+(index+1)+' | '+
etemp+
//img(src='enaplo.png', width='16px', height='16px',style='text-align:center;vertical-align: middle',data-original-title='Enapló köteles' data-toggle='tooltip' data-placement='bottom' data-container='body')'+
'' +megrendelo+' | '+
''+ work.title+' | '+
- '' + work.workDate + ' | '+
- '' + state+' | '+
+ '' + moment(work.workDate).format('YYYY.MM.DD') + ' | '+
+ state+
'' + work.workNumber+' | '+
drCount+
+ wrCount+
'' + po+' | '+
'' + work.devicesArray.length+' | '
});
res.send(tr);
- }
- });
+ // }
+ //});
});
var charToByte = exports.charToByte = function charToByte(c) {
@@ -748,8 +795,16 @@ app.get('/work/generateXML/:wid/:drid',utils.ensureAuthenticated,function(req,re
// var data={result:'HAHA'};
// res.send(data);
});
+
+ function findById(array, id) {
+ return array.find(item => {
+ const a=String(item._id)
+ const b=String(id)
+ //if (a===b)console.log(`IDS A: ${a} B: ${b}`)
+ return a===b;});
+ }
// Works Route
-app.get('/', utils.ensureAuthenticated, function(req, res) {
+app.get('/', utils.ensureAuthenticated,async function(req, res) {
var admin=false;
//var ver=gitVersion();
@@ -760,78 +815,60 @@ app.get('/', utils.ensureAuthenticated, function(req, res) {
return;
}
- /* A munkában reésztvevők számítása
- db.getCollection('dailyreports').aggregate([
- {$match:{"workId" : ObjectId("61a9c4bee9b30661f1883c19")}},
- {$unwind: '$dailyReport'},
-
- {$unwind: '$dailyReport.employeeList'},
-
- { $group: {_id: '$dailyReport._id', list: {$push: '$dailyReport.employeeList'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}},
-
-
- {$project: {
- item: 1,
- numberOfColors: { $cond: { if: { $isArray: "$list" }, then: { $size: "$list" }, else: "NA"} }
- }},
- {$group: {_id: null, total_sum: {'$sum': '$numberOfColors'}}},
- */
- // var worksRender=[];
- Work.find({},null,{sort: {workNumber: -1}} ,function(err, works){
- if (err)
+
+
+ var works=await Work.find({},null,{sort: {workNumber: -1}})// ,function(err, works){
+ if (!works)
{
console.log(err);
}
- else {
-// ----------------------------------
- /* var bar2 = new Promise((resolve, reject) => {
- works.forEach((element,index,array) =>{
-
- //if (element.dailyReportId){
-
- DailyReport.aggregate([
- {$match:{'_id' : element.dailyReportId}},
- {$unwind: '$dailyReport'},
-
- {$unwind: '$dailyReport.employeeList'},
-
- { $group: {_id: '$dailyReport._id', list: {$push: '$dailyReport.employeeList'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}},
-
- {$project: {
- item: 1,
- numberOfColors: { $cond: { if: { $isArray: "$list" }, then: { $size: "$list" }, else: "NA"} }
- }},
- {$group: {_id: null, total_sum: {'$sum': '$numberOfColors'}}},
- ]).exec((err,results)=>{
- if (results.length>0)
- {
- //JSON(element).
- element.totalSum=4;//results[0].total_sum;
- // worksRender.push(element);
- console.log('TS: '+results[0].total_sum);
- if (index === array.length -1) resolve();
+ // else {
+ var workrReportCount= await WorkReport.aggregate(
+ [
+ {$unwind: '$workFlow'},
+ {"$project":
+ {
+ "_id":"$workFlow._id",
+ "wid":"$workId",
+ "el":"$workFlow.employeeList",
+ "count": {$size:"$workFlow.employeeList"},
+ }
+ },
+ {
+ $group: {
+ _id: '$wid',
+ 'workName': {$push:'$count'}
+ }
+ },{
+ $project: {
+ total: {
+ $reduce: {
+ input: "$workName",
+ initialValue: 0,
+ in: { $add: ["$$value", "$$this"] }
}
- });
- //}
- // else
- // {
- // element.totalSum=4;//results[0].total_sum;
- // worksRender.push(element);
-
- // if (index === array.length -1) resolve();
- // }
-
- }); // forEach
-
- });// Promise
- */
+ }
+ }
+ }
+
+ ]
+ )
works.forEach((element,index,array) =>{
var dr=element.dailyReport;
+ var wrc=findById(workrReportCount,element._id)
var wc=0;
dr.forEach((el,index,arr)=>{
wc+=el.employeeList.length;
});
element.wc=wc*8;
+ if (wrc)
+ {
+ element.wrc=wrc.total*8
+ }
+ else
+ {
+ element.wrc=0;
+ }
});
//---------------------------------
res.render('index', {
@@ -839,9 +876,9 @@ app.get('/', utils.ensureAuthenticated, function(req, res) {
works: works,
rot: req.user.isAdmin,
});
- } //else
+ // } //else
});
-});
+//});
// Works Route
@@ -1295,8 +1332,6 @@ app.get('/print_report/:id',utils.ensureAuthenticated,function(req,res){
});
});
-
-
// Napi jelentés Nyomtatási kép generálás
function printWork(id,callback)
{
@@ -1704,6 +1739,224 @@ function printWork(id,callback)
+}
+
+// Napi műhely jelentések nyomtatása
+// Get Single Work
+app.get('/print_workreport/:id',utils.ensureAuthenticated,async function(req,res){
+ var PdfPrinter=require('pdfmake');
+
+ res.setHeader('Content-Type', 'application/json');
+ try{
+ var wtSum=0;
+ const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
+ const workHeader=await Work.findOne({"_id":mongoose.Types.ObjectId(req.params.id)},{poNumber:1,workNumber:1,megrendelo:1})
+ const workTimesSum=await WorkReport.aggregate(
+ [
+ { $match: { 'workId': mongoose.Types.ObjectId(req.params.id)} },
+ {$unwind: '$workFlow'},
+ {$unwind: '$workFlow.employeeList'},
+ {$group: {_id: '$workFlow.EmployeeList', count:{$sum:1}}},
+ { "$limit": 1 },
+ {"$project": {"_id":0,
+ "count": 1,}
+ }
+ ]
+ )
+
+ if (workTimesSum.length>0) wtSum=workTimesSum[0].count*8
+ var data=await printWorkReport(reports,workHeader)
+ console.log(JSON.stringify(data));
+ // fss.writeFile(path.normalize('d:\\test.json'), JSON.stringify(data));
+ res.send(data);
+ //res.send({'response':'ok','reports':reports, 'workTimesSum':wtSum});
+ }catch(err){
+
+ res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
+ }
+})
+
+// Műhely Napi jelentés Nyomtatási kép generálás
+async function printWorkReport(reports, workHeader)
+{
+
+ var item=[];
+ var wName=workHeader;
+ var i=0;
+ moment.locale('hu');
+ item.push([ {text:'#', alignment: 'left'},{text:'Dátum', alignment: 'center'}, {text:'Munkafolyamat', alignment: 'center'}, {text:'Résztvevők', alignment: 'center'}]);
+
+
+ wName=reports[0].workTitle;
+ reports.forEach((report,index)=>{
+
+
+ report.workFlow.forEach((wf,idx)=>{
+ var emps="";
+ wf.employeeList.forEach((employee,ind)=>{
+ emps=emps+employee.name+'\r\n';
+ i++;
+ })
+ item.push([
+ {id:i,text: index+1, style:'tableData',rowSpan: report.workFlow.length},
+ {text: moment(report.date).format('YYYY.MM.DD'), style:'tableData', alignment: 'center',rowSpan: report.workFlow.length},
+ {text: wf.Title, style:'tableData', alignment: 'center'},
+ {text: emps, style:'tableData', alignment: 'center'},
+ ]);
+
+ })
+
+ })
+
+
+
+ // playground requires you to assign document definition to a variable called dd
+
+ var dd = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',//'landscape',
+ pageMargins: [ 20, 20, 20, 40 ],
+ keepWithHeaderRows: true,
+ info: {
+ title: 'Műhelymunkák',
+ author: 'IO-Technic Munkanyílvántartó',
+ subject: 'Műhely munkák naplója',
+ keywords: 'Napló',
+ },
+ /* pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) {
+ return currentNode.id === 6 && followingNodesOnPage.length != 0;
+ },*/
+ pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) {
+ return currentNode.startPosition.top >= 150;
+ },
+ //header: 'dsadad',
+ footer: function(currentPage, pageCount){
+ return {
+
+ height: 30,
+ stack:[
+ {text:currentPage.toString() + ' / ' + pageCount.toString(), alignment: 'center'},
+ {
+ columns: [
+
+ {width: '*',text:'IO-Technic Munkaidő és munkanyílvántartó rendszer. www.iotechnic.eu', alignment: 'center'},
+ {width: '20%',text: new Date().toString(), alignment: 'center'},
+ ]
+ },
+
+ ]
+ }
+ },
+
+ content: [
+
+ {
+ alignment: 'justify',
+ columns: [
+ {text: 'Munka Jelentés ', style: 'header'},
+
+ ]
+
+
+ },
+ {
+ stack:[
+ {text: 'Megnevezés: '+ wName ,style:workHeader},
+ {text: 'Megrendelő: '+workHeader.megrendelo,style:workHeader },
+ {text: 'Munkaszám: '+workHeader.workNumber,style:workHeader},
+ {text: 'PO: '+workHeader.poNumber,style:workHeader},
+
+ ]
+ },
+ {
+ width: auto,
+ style: 'tableExample',
+ table: {
+ headerRows: 1,
+ //dontBreakRows: true,
+
+ //widths: [20, 'auto', 80, 80,'*','*','*'],
+ // widths: [20, '*', 70, 70,50,'auto','auto'],
+ widths: [20, 70,'*', 100],
+ body: item,//[],
+
+ },
+ layout: {
+ fillColor: function (rowIndex, node, columnIndex) {
+ return (rowIndex % 2 === 0) ? '#CCCCCC' : null;
+ }
+ },
+
+ }
+ ],
+ styles: {
+ header: {
+ fontSize: 18,
+ bold: true,
+ fillColor: '#eeeeee',
+ margin: [0, 0, 0, 10]
+ },
+ footerBrandText:{
+ fontSize: 12,
+ bold: false,
+ fillColor: '#eeeeee',
+ alignment: 'center'
+ },
+ datum: {
+ fontSize: 18,
+ bold: true,
+ fillColor: '#eeeeee',
+ alignment: 'right'
+ },
+ subheader: {
+ fontSize: 16,
+ bold: true,
+ fillColor: '#eeeeee',
+ margin: [0, 10, 0, 5]
+ },
+ tableExample: {
+ margin: [0, 5, 0, 15]
+ },
+ tableHeader: {
+ bold: true,
+ fontSize: 10,
+ fillColor: '#eeeeee',
+ color: 'red'
+ },
+ workHeader: {
+ bold: false,
+ fontSize: 10,
+ italics: true,
+ color: 'blue'
+ },
+ tableData: {
+ bold: false,
+ fontSize: 10,
+ italics: true,
+ color: 'green'
+ },
+ tableDataWe: {
+ bold: false,
+ fontSize: 10,
+ italics: true,
+ fillColor: '#eeffee',
+ color: 'red'
+ }
+ },
+ defaultStyle: {
+ // alignment: 'justify'
+ }
+ };
+ // dd.content[2].table.body=item;
+
+ //pdf.createPdf(dd).open();
+ // callback(null,dd);
+ // ...
+ return dd;
+
+
+
+
}
// Nyomtatási kép generálás
@@ -1905,6 +2158,7 @@ const { date } = require('jszip/lib/defaults');
const { apiGetWorkList, apiGetEmployeeList, apiGetDailyReport, apiEmployee, apiGetAllReport, apiCheckDevice, apiRegisterDevice,apiRequestAPIkey, apiGetQRCode,apiGetWorkState } = require('./js/androidApi');
const { string } = require('jszip/lib/support');
const { generateXML } = require('./js/enaploGen');
+const { auto } = require('async');
app.use('/devicesrfid', devices_rfid);
app.use('/vehicles', vehicles);
diff --git a/package.json b/package.json
index 2957ac6..54d6fbf 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
"passport": "^0.4.1",
"passport-local": "^1.0.0",
"pdfkit": "^0.9.1",
- "pdfmake": "^0.2.4",
+ "pdfmake": "^0.2.18",
"pizzip": "^3.1.3",
"pug": "^3.0.2",
"semantic-ui-table": "^2.3.1",
diff --git a/public/js/work_utils.js b/public/js/work_utils.js
index 6e92873..91d1134 100644
--- a/public/js/work_utils.js
+++ b/public/js/work_utils.js
@@ -22,6 +22,32 @@
alert('Nincs mit nyomtatni!');
}
});
+
+ // Műhely munka nyomtatása
+ $("#printWorkReport").click(function(ev) {
+
+ isLoaded=false;
+ var workId = $(this).attr('data-Id');
+ if (workId)
+ {
+ //$.get('/invoices/print2' , function(data) { console.log(data);
+ $.get('/print_workreport/'+workId , function(data) {
+
+ if (!isLoaded)
+ { isLoaded=true;
+
+ //console.log(data);
+ pdfMake.createPdf(data).open();
+ }
+ });
+
+ }
+ else
+ {
+ alert('Nincs mit nyomtatni!');
+ }
+ });
+
function getXML(workId,drId,reportDate){
let filename = '';
fetch("/work/generateXML/"+workId+"/"+drId)
diff --git a/views/index.pug b/views/index.pug
index 857a7cd..46f58d0 100644
--- a/views/index.pug
+++ b/views/index.pug
@@ -142,10 +142,11 @@ block content
col(width='1%')
col(width='auto')
col(width='auto')
- col(width='15%')
col(width='5%')
col(width='5%')
col(width='5%')
+ col(width='3%')
+ col(width='3%')
col(width='5%')
col(width='5%')
thead
@@ -158,6 +159,7 @@ block content
th(style='text-align:center') Státusz
th(style='text-align:left') M.SZ.
th(style='text-align:center') Órák
+ th(style='text-align:center') Műhely
th(style='text-align:center') PO szám
th(style='text-align:left') Ber.
tbody(id='workTable',style='overflow-y: auto;')
@@ -172,12 +174,14 @@ block content
td(style='text-align:left; vertical-align:middle;font-size: 9px;font-weight: bold;') #{work.megrendelo || "-"}
td(style='vertical-align:middle')
a(href="/work/"+work._id)= work.title
- td(style='text-align:center;vertical-align:middle') #{work.workDate}
+ td(style='text-align:center;vertical-align:middle') #{moment(work.workDate).format("YYYY.MM.DD")}
if (work.state==='Opened')
- td(style='text-align:center;vertical-align:middle') Folyamatban
+ td(style='text-align:center;vertical-align:middle; color:green')
+ i.fa.fa-unlock
else
if (work.state==='Closed')
- td(style='text-align:center;vertical-align:middle') Lezárva
+ td(style='text-align:center;vertical-align:middle; color:red')
+ i.fa.fa-lock
else
td(style='text-align:center;vertical-align:middle')
@@ -187,9 +191,17 @@ block content
span.badge.badge-success #{work.wc}
else
span.badge #{work.wc}
+ td(style='text-align:center;vertical-align:middle')
+ if (work.wrc>0)
+ span.badge(style="background-color: DodgerBlue !important") #{work.wrc}
+ else
+ span.badge #{work.wrc}
td(style='text-align:center;vertical-align:middle') #{work.poNumber}
td(style='text-align:left;vertical-align:middle')
- span.badge #{work.devicesArray.length}
+ if (work.devicesArray.length>0)
+ span.badge.badge-success #{work.devicesArray.length}
+ else
+ span.badge #{work.devicesArray.length}
script(src='/bower_components/jquery/dist/jquery.js')
script(type='text/javascript',src='/build/pdfmake.js')
script(type='text/javascript',src='/build/vfs_fonts.js')
@@ -311,6 +323,7 @@ block content
var parameters = { year: yr,condition: cond };
$.get( '/filter',parameters, function(data) {
//console.log(data);
+ $('#workTable').empty();
var wTable=document.getElementById("workTable");
wTable.innerHTML=data;
diff --git a/views/work.pug b/views/work.pug
index b9fea6b..d94bba6 100644
--- a/views/work.pug
+++ b/views/work.pug
@@ -170,14 +170,17 @@ block content
.panel.panel-warning
.panel-heading
.row
- .col-md-8
+ .col-md-7
h4 Műhely munkavégzés
.col-md-2
h5#workTimesSum
+ .col-md-1.float-right
+ button.btn.btn-success.button-spacer(id='printWorkReport',name='printWorkReport', data-id=work._id,type='button')
+ span.fa.fa-solid.fa-print
.col-md-2.float-right
span.pull-right.clickable
i.glyphicon.glyphicon-chevron-up
-
+
.panel-body
.row
.table-responsive