diff --git a/app.js b/app.js index 316e807..b9b3272 100644 --- a/app.js +++ b/app.js @@ -24,7 +24,8 @@ var PdfPrinter=require('pdfmake'); //const util = require('util'); //var currentWorkNumber=0; const { XMLParser, XMLBuilder, XMLValidator} = require("fast-xml-parser/src/fxp"); -const { apiSaveReport, apiGetReport, apiGetReportList, apiGetUsers, apiGetReportDates, apiUpdateReport } = require('./js/workReport.js'); +const { apiSaveReport, apiGetReport, apiGetReportList, apiGetUsers, apiGetReportDates, apiUpdateReport, apiGetReportSum } = require('./js/workReport.js'); +const { apiGetDailyReportSum } = require('./js/dailyReport.js'); let WorkReport = require('./models/workReportModel'); moment.locale('HU'); const fss = require('fs'); @@ -1223,6 +1224,7 @@ var wnY=dt.getFullYear(); // Get Single Work app.get('/work/:id',utils.ensureAuthenticated,function(req,res){ + Work.findById(req.params.id, function(err,work) // Munka keresése sz ID-je alapján { if (err) @@ -1299,6 +1301,7 @@ Work.findById(req.params.id, function(err,work) // Munka keresése sz ID-je alap { $group: {_id: '$dailyReport._id','foreman':{$first: '$dailyReport.foremanId'}, list: {$push: '$books'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}}, { $sort : { 'date' : -1 } } ]).exec((err,results)=>{ + res.render('work', { dailyReports:results, @@ -2199,8 +2202,11 @@ app.route('/workreportSave').post(apiSaveReport); app.route('/workreportUpdate').post(apiUpdateReport); app.route('/workreportUserList').get(apiGetUsers); app.route('/workreportGet/:id/:date').get(apiGetReport); +app.route('/workreportGetSum/:id').get(apiGetReportSum); app.route('/workreportList/:id').get(apiGetReportList); app.route('/workreportDates/:id').get(apiGetReportDates); + +app.route('/dailyReportGetSum/:id').get(apiGetDailyReportSum); // Route Files app.locals.moment = require('moment'); //app.use('/articles', articles); @@ -2232,6 +2238,7 @@ const { string } = require('jszip/lib/support'); const { generateXML } = require('./js/enaploGen'); const { auto } = require('async'); + app.use('/devicesrfid', devices_rfid); app.use('/vehicles', vehicles); app.use('/gantt', gantt); diff --git a/js/dailyReport.js b/js/dailyReport.js new file mode 100644 index 0000000..6b5a507 --- /dev/null +++ b/js/dailyReport.js @@ -0,0 +1,43 @@ +let Work = require('../models/works'); +const asyncHandler = require('express-async-handler'); +var mongoose = require('mongoose'); + +// A teljes munka ráfordítás műhelyben +exports.apiGetDailyReportSum=asyncHandler(async (req,res)=>{ + //const {workId,foremanId, workTitle,employeeList }=req.body; + + res.setHeader('Content-Type', 'application/json'); + try{ + var wtSum=0; + + const count=await Work.aggregate([ + {$match:{'_id' : mongoose.Types.ObjectId(req.params.id)}}, + {$unwind: '$dailyReport'}, + + {$unwind: {path:'$dailyReport.employeeList',preserveNullAndEmptyArrays:true}}, + + + {"$lookup": { + "localField": "dailyReport.employeeList", + + "from": "employees", + "foreignField": "_id", + "as": "books" + }}, + + {$unwind: {path:'$books',preserveNullAndEmptyArrays:true}}, + {$group: {_id: '$workFlow.EmployeeList', count:{$sum:1}}}, + { "$limit": 1 }, + {"$project": {"_id":0, + "count": 1,} + } + ]) + + if (count) wtSum=count[0].count*8 + res.send({'response':'ok', 'dailyReportSum':wtSum}); + }catch(err){ + + res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message}); + } + +}); diff --git a/js/workReport.js b/js/workReport.js index 8fb70cb..4a8ef80 100644 --- a/js/workReport.js +++ b/js/workReport.js @@ -118,6 +118,38 @@ exports.apiGetReport=asyncHandler(async (req,res)=>{ }); +// A teljes munka ráfordítás műhelyben +exports.apiGetReportSum=asyncHandler(async (req,res)=>{ + //const {workId,foremanId, workTitle,employeeList }=req.body; + + res.setHeader('Content-Type', 'application/json'); + try{ + var wtSum=0; + + 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 + res.send({'response':'ok', 'workTimesSum':wtSum}); + }catch(err){ + + res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message}); + } + +}); + // Használt dátumok exports.apiGetReportDates=asyncHandler(async (req,res)=>{ //const {workId,foremanId, workTitle,employeeList }=req.body; diff --git a/models/employee.js b/models/employee.js index 9f30eea..286d38c 100644 --- a/models/employee.js +++ b/models/employee.js @@ -123,7 +123,7 @@ let employeeSchema = mongoose.Schema({ duration: {type: Number}, }], - sickpayData: [{ + sickpayData: [{ start_date: {type: String}, end_date: {type: String}, duration: {type: Number}, diff --git a/public/js/work_utils.js b/public/js/work_utils.js index d0c4523..2360a21 100644 --- a/public/js/work_utils.js +++ b/public/js/work_utils.js @@ -76,6 +76,46 @@ } + function getWorkReportSumMuhely() + { + document.getElementById ('workReportSumMuhely').textContent=0; + //Fetch workReport + var wid = document.getElementById ('wn').textContent; + fetch('/workreportGetSum/'+wid , { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' + } + }) + .then(response => response.json()) + .then(data => { + document.getElementById ('workReportSumMuhely').textContent=`Műhely munkaórák: ${data.workTimesSum} óra` + }) + + .catch(error => console.error('Error:', error)); + } + + function getDailyReportSum() + { + document.getElementById ('dailyReportGetSum').textContent=0; + //Fetch workReport + var wid = document.getElementById ('wn').textContent; + fetch('/dailyReportGetSum/'+wid , { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' + } + }) + .then(response => response.json()) + .then(data => { + document.getElementById ('dailyReportGetSum').textContent=`Terep munkaórák: ${data.dailyReportSum} óra` + }) + + .catch(error => console.error('Error:', error)); + } + function updateWorkReport() { var selectedDate = $('#workReportDate').data("DateTimePicker").date().format('YYYY.MM'); @@ -138,13 +178,15 @@ $('#workReportTable2 > tbody:last-child').append (newRow); }) //$('#workReportTable > tbody:last-child').append (newRow); - document.getElementById ('workTimesSum').textContent=`Munkaórák: ${data.workTimesSum} óra` + document.getElementById ('workTimesSum').textContent=`Műhely munkaórák: ${data.workTimesSum} óra` }) .catch(error => console.error('Error:', error)); } $(document).ready(function () { + getWorkReportSumMuhely(); + getDailyReportSum(); $('#workReportDate').datetimepicker({ locale: 'hu', format: 'LD', diff --git a/routes/employee.js b/routes/employee.js index 5a3d646..5601b15 100644 --- a/routes/employee.js +++ b/routes/employee.js @@ -5851,7 +5851,7 @@ async function makeWorktimeAll(calcdate) if (element.isSubcontractor===null) // Alkalmazott { msz=getMunkaszunet(calcdate); - const data= printPage(employee,som,month,weekend,req.params.mindate,holidaysArray,sickpaysArray,msz) + const data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz) //var data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz)//.then(function(data){ var fonts = { Roboto: { @@ -5891,7 +5891,7 @@ async function makeWorktimeAll(calcdate) { msz=getMunkaszunet(calcdate); //printPageContractor(element,som,month,weekend,calcdate,holidaysArray, function(err,data){ - const data= printPage(employee,som,month,weekend,req.params.mindate,holidaysArray,sickpaysArray,msz) + const data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz) // var data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz) var fonts = { Roboto: { diff --git a/views/index.pug b/views/index.pug index 67cea43..f469f3a 100644 --- a/views/index.pug +++ b/views/index.pug @@ -142,7 +142,7 @@ block content col(width='1%') col(width='auto') col(width='auto') - col(width='5%') + //-col(width='5%') col(width='5%') col(width='5%') col(width='5%') @@ -156,7 +156,7 @@ block content th th(style='text-align:left') Megrendelő th Megnevezés - th(style='text-align:center') File + //-th(style='text-align:center') File th(style='text-align:center') Létrehozva th(style='text-align:center') Státusz th(style='text-align:left') M.SZ. @@ -176,7 +176,7 @@ 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') + //-td(style='text-align:center;vertical-align:middle') if (work.filesCM.length>0) span.badge.badge-success #{work.filesCM.length} else diff --git a/views/layout.pug b/views/layout.pug index b5822fc..530ec43 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -5,6 +5,7 @@ html title Munka nyílvántartó //-link(rel='icon' href='IOCT_LOGO.ico' type='image/icon type') link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.css') + //-link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css') link(rel='stylesheet' href='/css/style.css') link(rel='stylesheet' href='/css/switch.css') @@ -125,7 +126,7 @@ html hr footer p IO-Technic Hungary Copyright © 2018 - script(src='/bower_components/jquery/dist/jquery.js') + script(src='/bower_components/jquery/dist/jquery.min.js') //script(src='http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js') //script(type='text/javascript', src='/bower_components/jquery/dist/jquery.min.js') script(src='/bower_components/bootstrap/dist/js/bootstrap.js') diff --git a/views/work.pug b/views/work.pug index 436ac25..4c13c4f 100644 --- a/views/work.pug +++ b/views/work.pug @@ -2,7 +2,8 @@ extends layout block content .container - link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.css') + //-link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.css') + //-link(rel='stylesheet' href='https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css') link(href='//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', rel='stylesheet') link(rel='stylesheet', type='text/css', href='https://unpkg.com/lightpick@latest/css/lightpick.css') link(rel='stylesheet', href='/bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css') @@ -84,7 +85,13 @@ block content hr div.row div.col-md-12 - p Megjegyzés: #{work.body} + h4#workTimeSum + hr + .row + .col-sm-6 + h4#workReportSumMuhely + .col-sm-6 + h4#dailyReportGetSum if (work.filesCM.length) hr each file, i in work.filesCM @@ -296,7 +303,7 @@ block content script(src='/bower_components/moment/min/moment-with-locales.js') script(type='text/javascript',src='/build/pdfmake.js') script(type='text/javascript',src='/build/vfs_fonts.js') - + script(src='https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.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. @@ -316,38 +323,7 @@ block content $(document).ready(function () { moment.locale('HU') updateWorkReport() - /*fetch('/workreportList/'+wid, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' - } - }) - .then(response => response.json()) - .then(data => { - console.log(data) - $.each(data.reports,function(i,item){ - var newRow="