diff --git a/js/workReport.js b/js/workReport.js
index 90aa4ba..964c0a4 100644
--- a/js/workReport.js
+++ b/js/workReport.js
@@ -82,8 +82,23 @@ exports.apiGetReport=asyncHandler(async (req,res)=>{
res.setHeader('Content-Type', 'application/json');
try{
+ var wtSum=0;
const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
- res.send({'response':'ok','reports':reports});
+ 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','reports':reports, 'workTimesSum':wtSum});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
diff --git a/public/js/workingtime.js b/public/js/workingtime.js
index 7457103..6e9310b 100644
--- a/public/js/workingtime.js
+++ b/public/js/workingtime.js
@@ -245,6 +245,8 @@ function renderWorkingTimesTableDetailed2(wtList)
var ot= 0;
var drName='';
var drShift='';
+ var wrName='';
+
var notes="";
//var companyNotes="";
/* if (wt.dailyReport==='')
@@ -278,7 +280,10 @@ function renderWorkingTimesTableDetailed2(wtList)
drShift+='
';
drName+=''+i+' '+drs.name+'
';
})
-
+ wrName='';
+ if (wt.workReport.wf)
+ wrName+=' Műhely: '+wt.workReport.wt+' '+wt.workReport.wf+'
';
+
}
if (wt.isWeekend)
{
@@ -345,7 +350,7 @@ function renderWorkingTimesTableDetailed2(wtList)
newRow.append(
'
'+moment(wt.date,'YYYY.MM.DD. HH:mm').format('DD')+' | '+
''+moment(wt.date,'YYYY.MM.DD. HH:mm').format('dddd')+' | '+
- ''+drName+locs+''+' | '+//wt.location+
+ ''+drName+wrName+locs+''+' | '+//wt.location+
''+drShift+arrives+' | '+//moment(wt.timeArrive,'YYYY.MM.DD. HH:mm').format('HH:mm')+
''+drShift+getaways+' | '+
diff --git a/routes/employee.js b/routes/employee.js
index ba13408..ad8d3f2 100644
--- a/routes/employee.js
+++ b/routes/employee.js
@@ -37,6 +37,7 @@ const e = require('express');
const { gmail } = require('googleapis/build/src/apis/gmail');
const user = require('../models/user');
let Work=require('../models/works');
+let WorkReport = require('../models/workReportModel');
var generator = require('generate-password');
const apiVehicle=require('../js/vehicleApi');
//const employee = require('../models/employee');
@@ -3172,6 +3173,8 @@ router.get('/worktimelist/:mindate', utils.ensureAuthenticated, function(req, re
// Egy havi munkaidő összegzés
function sumOfMonth(employee_id,mindate,callback)
{
+
+ getWorkReportById(employee_id,mindate).then(workReport=>{ // WorkReport Lekérése.
getWorkTimeListById(employee_id,mindate,function(err,wt){
if (err)
{
@@ -3184,6 +3187,7 @@ function sumOfMonth(employee_id,mindate,callback)
{
var hoursToday=0;
var drName='';
+ var dwr=''
var day = moment(element.date,'YYYY.MM.DD.').day();
var drDate = moment(element.date,'YYYY.MM.DD.').format('YYYY.MM.DD');
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
@@ -3193,7 +3197,22 @@ function sumOfMonth(employee_id,mindate,callback)
var lonE=element.longitudeE;
//var cNotes="";
//var notes="";
- //var dr=wt.rd.find(element => element.date==drDate)
+
+ var wr={}
+ if (workReport.length){
+ // wr=workReport.find(wrelement => wrelement.date===new Date(drDate))
+ workReport.forEach(function(wrelement){
+ ///console.log(`Itemdate: ${wrelement.date} CurrDate: ${new Date(drDate)}`)
+ if (new Date(wrelement.date).getTime()===new Date(drDate).getTime())
+ {
+ // console.log("Egyenlő!\n")
+ wr=wrelement;
+ }
+ })
+
+ if (wr!={})
+ console.log(wr.date)
+ }
var dr=wt.rd.filter(element => element.date==drDate)
if (typeof element.latitudeS==='undefined') latS='N/A'
if (typeof element.longitudeS==='undefined') lonS='N/A'
@@ -3218,17 +3237,22 @@ function sumOfMonth(employee_id,mindate,callback)
}
else
{
+
+ if (typeof wr==='undefined')
+ {
+ dwr='';
+ }
+ else
+ {
+ dwr=wr;
+ }
if (typeof dr==='undefined')
{
drName='';
}
else
{
- /*dr.forEach(function(elem){
- drName+=elem.name;
- })*/
drName=dr;
- //drName=dr.name;
}
// Még nincs ilyen nap, hozzáadjuk
workDays.push({
@@ -3258,7 +3282,8 @@ function sumOfMonth(employee_id,mindate,callback)
fullHours:element.workHours,
hours:0,
overTime:0,
- dailyReport:drName
+ dailyReport:drName,
+ workReport:dwr
});
}
@@ -3266,7 +3291,8 @@ function sumOfMonth(employee_id,mindate,callback)
})
callback(null,workDays);
}
- })
+ })})
+
}
// Munkaidő kiolvasás ID alapján
@@ -3428,31 +3454,57 @@ Employee.findOne({workingtimeId: id},function(err,element){
})
});
+// workReport By User lekérdezés
+async function getWorkReportById(employeeId,mindate){
-// Munkaidő lekérdezés
-/*function getWorkTimeListById(employeeId,mindate,callback)
-{
- var date = new Date();
- var query={};
-
-// Ehavi esedékes
-
- var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD.");
- var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD.");
- //query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
- query={$and:[{'date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
-
- WorkingTime.find(query,null,function(err, wt){
- if (err)
+ var dr_firstDay= moment(mindate,"YYYY.MM").startOf('month').toDate();
+ var dr_lastDay = moment(mindate,"YYYY.MM").endOf('month').toDate();
+
+ const result= await WorkReport.aggregate([
+ {$match: {"date":{$gte: dr_firstDay, $lte: dr_lastDay}}},
+ //{$match: {"workId": mongo.ObjectId("6715f6ca6908a157c7d1f468")}},
+ {
+
+ $unwind: "$workFlow"
+
+ },
+ { "$unwind": "$workFlow.employeeList" },
+ {$match: {"workFlow.employeeList.employeeId": mongo.ObjectId(employeeId)}},
+
+ {$group: { _id:{
+ 'wf': '$employeeList.workFlow',
+ 'wid': '$_id',
+ 'name': '$workFlow.employeeList.name',
+ },
+ 'id':{$first: '$_id'},
+ 'date':{$first:'$date'},
+ 'name': {$first:'$workFlow.employeeList.name'},
+ 'wf':{$first: '$workFlow.Title'},
+ 'wt':{$first: '$workTitle'}
+ //'nm':{$push: {name:'$employee.name', wf:'$employeeList.workFlow'}}
+ },
+ },
+ {
+ // cleanup
+ $project: {
+ _id: false,
+ }
+ }
+
+
+ ])
+ if (result.length){
+ return result
+ }
+ else
{
- callback(err);
+ return []
}
- else {
-
- callback(null,wt);
- }
- });
-}*/
+
+
+
+}
+// Munkaidő lekérdezés
function getWorkTimeListById(employeeId,mindate,callback)
{
var date = new Date();
@@ -3491,6 +3543,7 @@ function getWorkTimeListById(employeeId,mindate,callback)
}else
{
wt.rd=dr;
+ // wt.wr=workReport // WorkReport Lekérése.;
callback(null,wt);
}
})
@@ -5109,9 +5162,15 @@ function printPage(employee,som,month,weekend,mindate,holidaysArray,sickpaysArra
var getaways="";
var locs="";
var dreportList='';
+ var workReport='';
+ var wrShift='';
var day = moment(element.date,'YYYY.MM.DD.').day();
var notes="";
+ if (Object.keys(element.workReport).length!=0){
+ workReport=element.workReport.wt+' '+element.workReport.wf;
+ wrShift='\r\n'
+ }
if (element.dailyReport!='') drShift='\r\n'; else drShift='';
drShift='';
if (element.dailyReport)
@@ -5164,15 +5223,15 @@ function printPage(employee,som,month,weekend,mindate,holidaysArray,sickpaysArra
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataWe'},
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataWe', alignment: 'right'},
//{text:element.expiryDate, italics: true, color: 'gray'},
- {text:dreportList+"\r\n"+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'},
- {text:drShift+arrives, style:'tableDataWe', alignment: 'center'},
- {text:drShift+getaways, style:'tableDataWe', alignment: 'center'},
+ {text:dreportList+workReport+"\r\n"+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:element.state, italics: true, color: 'gray'},
- {text:drShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'},
- {text:drShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'},
+ {text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'},
+ {text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'},
//{text:element.notes, style:'tableDataWe', alignment: 'left'}]);
- {text:drShift+notes, style:'tableDataWe', alignment: 'left'}]);
+ {text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
}
else
{
@@ -5196,16 +5255,16 @@ function printPage(employee,som,month,weekend,mindate,holidaysArray,sickpaysArra
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableData'},
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableData', alignment: 'left'},
//{text:element.expiryDate, italics: true, color: 'gray'},
- [{text:dreportList, style:'dailyReport'},{text:locs, style:'tableDataLoc', alignment: 'center'}],
+ [{text:dreportList+workReport+"\r\n", style:'dailyReport'},{text:locs, style:'tableDataLoc', alignment: 'center'}],
//{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'},
- {text:drShift+arrives, style:'tableData', alignment: 'center'},
- {text:drShift+getaways, style:'tableData', alignment: 'center'},
+ {text:drShift+wrShift+arrives, style:'tableData', alignment: 'center'},
+ {text:drShift+wrShift+getaways, style:'tableData', alignment: 'center'},
//{text:element.state, italics: true, color: 'gray'},
- {text:drShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'},
- {text:drShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'},
+ {text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'},
+ {text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'},
//{text:element.notes, style:'tableData', alignment: 'left'}]);
- {text:drShift+notes, style:'tableDataWe', alignment: 'left'}]);
+ {text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
}
}//else
diff --git a/views/Modals/modal_workReportEdit.pug b/views/Modals/modal_workReportEdit.pug
index 5a935d6..812efec 100644
--- a/views/Modals/modal_workReportEdit.pug
+++ b/views/Modals/modal_workReportEdit.pug
@@ -41,7 +41,7 @@
script(src='/bower_components/jquery/dist/jquery.min.js')
//-script(src='/bower_components/bootstrap-validator/dist/validator.min.js')
script.
-
+ var cid=0;
var workers=[]
var usedWorkers=[]
const form = document.getElementById('kabelform2');
@@ -140,7 +140,14 @@ script.
var t=JSON.parse(dummy);
- let result = t.workFlow.find(obj => obj._id === workFlowId);
+ let result = t.workFlow.find(obj => {
+ if (obj._id){
+ return obj._id=== workFlowId
+ }
+ else {
+ return obj.cid=== workFlowId
+ }
+ });
document.getElementById("workFlow").value=result.Title
workers=[]
diff --git a/views/Modals/modal_workReportEditAdd.pug b/views/Modals/modal_workReportEditAdd.pug
new file mode 100644
index 0000000..fe60e87
--- /dev/null
+++ b/views/Modals/modal_workReportEditAdd.pug
@@ -0,0 +1,197 @@
+#workReportEditAddModal.modal(tabindex='-1', role='dialog', aria-labelledby='workReportEditAddModalLabel')
+ //-form(method='GET',id='holidayForm' action='/employee/holidays_byperson/')
+ style(type="text/css").
+ .aaa:active,
+ .aaa.active {
+ background: red !important;
+ box-shadow: none !important;
+ }
+ .modal-dialog(role='document', style='width:1000px;')
+ .modal-content
+ .modal-header#workReportEditAddHeader.bg-primary(style="background: Primary")
+ h4 #{workTitle}
+ .modal-body(style='background-color:#5f6b79')
+
+ form#kabelform3
+ #form-group
+ input#wn1(name='wn1',style='display:none')
+ input#userid(name='userid',style='display:none', value=user._id)
+ input#id(name='id',style='display:none')
+ input#modify(name='modify',style='display:none')
+
+ .row
+ .col-sm-12
+ label(for="workFlow1",style='color: white') Munka leírása:
+ input.form-control(id='workFlow1', name='workFlow1', required, minlength="6",type=text, autofocus, readonly=false,style='')
+ br
+ .row
+ .col-sm-12
+ #buttons3(style="margin: 10px;")
+
+ h4#arc
+ br
+ //button#submit.btn.btn-primary(type='submit' ) Rendben
+
+ .modal-footer(style="background-color: #2C3446")
+
+
+ button#sendData1.btn.btn-primary(type='button',data-dismiss='modal') Mentés
+ button#fmodalClose.btn.btn-primary(type='button', data-dismiss='modal') Mégsem
+
+ script(src='/bower_components/jquery/dist/jquery.min.js')
+ //-script(src='/bower_components/bootstrap-validator/dist/validator.min.js')
+script.
+ var cid=0;
+ var workers=[]
+ var usedWorkers=[]
+ const form1 = document.getElementById('kabelform3');
+ function handleClick(identifier) {
+ const state=$(identifier).hasClass('active');
+ //const d=JSON.parse(decodeURIComponent($(identifier).data('item')))
+ const d=$(identifier).data('id')
+ const name=$(identifier).data('name')
+ if (!state)
+ {
+ workers.push({employeeId:d, name:name});
+ }
+ else
+ {
+ workers=workers.filter(obj=>obj.employeeId!==d);
+ }
+ if (workers.length)
+ {
+ document.getElementById("sendData1").disabled=false
+ }
+ else
+ {
+ document.getElementById("sendData1").disabled=true
+ }
+ $('#arc').text(JSON.stringify(workers))
+ }
+ function textChanged1(){
+ var length=document.getElementById("workFlow1").value.length
+ if (length>3)
+ {
+ let divElement = document.getElementById("buttons3");
+ $.each(divElement.children,function(i,item){
+ if (workers.some(item3 => item3.employeeId === item.id)){
+ item.classList.add("active")
+ }
+ if (usedWorkers.some(item2 => item2.employeeId === item.id)===false){
+ item.disabled=false
+ }
+
+ })
+ if (workers.length)
+ {
+ document.getElementById("sendData1").disabled=false
+ }
+ }else{
+ let divElement = document.getElementById("buttons3");
+ $.each(divElement.children,function(i,item){
+
+ item.disabled=true
+ item.classList.remove("active")
+ })
+ workers=[]
+ document.getElementById("sendData1").disabled=true
+ }
+ }
+ $(document).ready(function () {
+ var wid = document.getElementById ('wn').textContent;
+ var uid = document.getElementById ('uid').textContent;
+ var workFlowId=""
+
+
+ const title=document.getElementById ('wn').textContent;
+ document.getElementById("workFlow1").onkeydown = function() {
+ textChanged1();
+ };
+ $('#workFlow1').change(function(event) {
+ //do stuff with the "event" object as the object that called the method
+ textChanged1();
+ }
+ );
+
+ document.getElementById('sendData1').addEventListener('click', function(a) {
+ const workFlowTitle = document.getElementById('workFlow1').value;
+ var dummy=document.getElementById('dummy').textContent
+ var t=JSON.parse(dummy);
+ //let result = t.workFlow.find(obj => obj._id === workFlowId);
+ /*var foundIndex = t.workFlow.findIndex(x => x._id == workFlowId);
+ const workFlowItem=
+ {
+ Title : workFlowTitle,
+ employeeList: workers
+ }
+ t.workFlow[foundIndex].Title=workFlowTitle;
+ t.workFlow[foundIndex].employeeList=workers;*/
+ const workFlowItem=
+ {
+ cid: Date.now(),
+ Title : workFlowTitle,
+ employeeList: workers
+ }
+ t.workFlow.push(workFlowItem)
+ document.getElementById('dummy').textContent=JSON.stringify(t)
+ updateEditTable()
+ })
+ // Modal megjelenítése esemény
+ $(document).on('show.bs.modal','#workReportEditAddModal', function (event) {
+ form1.reset();
+ document.getElementById("sendData1").disabled=true
+ var dummy=document.getElementById('dummy').textContent
+
+ var button = $(event.relatedTarget); // button the triggered modal
+ workFlowId = button.data("rid"); //data-id of button which is equal to id (primary key) of person
+
+
+ var t=JSON.parse(dummy);
+ //let result = t.workFlow.find(obj => obj._id === workFlowId);
+ //document.getElementById("workFlow").value=result.Title
+
+ workers=[]
+ usedWorkers=[];
+
+ //workers=result.employeeList;
+
+
+ $.each(t.workFlow,function(i,item){
+ //if(item._id!=result._id)
+ // {
+ var arr=usedWorkers
+ usedWorkers=[...arr,...item.employeeList]//.push(item.employeeList)
+ // }
+ })
+
+ let divElement = document.getElementById("buttons3");
+ while (divElement.firstChild) {
+ divElement.removeChild(divElement.firstChild);
+ }
+ // const title=document.getElementById ('headertitle').textContent;
+
+ //var foo = document.getElementById("buttons");
+ //Append the element in page (in span).
+
+ //Fetch workReport
+
+ fetch('/workreportUserList', {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
+ }
+ })
+ .then(response => response.json())
+ .then(data => {
+ console.log(data)
+ $.each(data.users,function(i,item){
+ var data_str = encodeURIComponent(JSON.stringify(item));
+ $('').appendTo('#buttons3');
+ })
+ textChanged1()
+ })
+ .catch(error => console.error('Error:', error));
+ })
+
+ });
\ No newline at end of file
diff --git a/views/work.pug b/views/work.pug
index 818f027..b9fea6b 100644
--- a/views/work.pug
+++ b/views/work.pug
@@ -170,10 +170,10 @@ block content
.panel.panel-warning
.panel-heading
.row
- .col-md-9
+ .col-md-8
h4 Műhely munkavégzés
- .col-md-1
-
+ .col-md-2
+ h5#workTimesSum
.col-md-2.float-right
span.pull-right.clickable
i.glyphicon.glyphicon-chevron-up
@@ -272,6 +272,7 @@ block content
}
$(document).ready(function () {
moment.locale('HU')
+ document.getElementById ('workTimesSum').textContent=0;
//Fetch workReport
var wid = document.getElementById ('wn').textContent;
fetch('/workreport/'+wid, {
@@ -317,7 +318,7 @@ block content
$('#workReportTable2 > tbody:last-child').append (newRow);
})
//$('#workReportTable > tbody:last-child').append (newRow);
-
+ document.getElementById ('workTimesSum').textContent=`Munkaórák: ${data.workTimesSum} óra`
})
.catch(error => console.error('Error:', error));
diff --git a/views/workReportEdit.pug b/views/workReportEdit.pug
index 94b7c6b..393c512 100644
--- a/views/workReportEdit.pug
+++ b/views/workReportEdit.pug
@@ -7,6 +7,7 @@ block content
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")
include Modals/modal_workReportEdit
+ include Modals/modal_workReportEditAdd
style(type="text/css").
@@ -59,9 +60,9 @@ block content
.btn-toolbar
- //button.btn.btn-primary(data-toggle='modal', data-wn=workId,data-title=workTitle, data-target='#workReportNewModal',data-headertitle='Műhely munkavégzés',type='button')
+ button.btn.btn-primary(data-toggle='modal', data-wn=workId,data-title=workTitle, data-target='#workReportEditAddModal',data-headertitle='Műhely munkavégzés',type='button')
i.fa.fa-plus.fa-lg.fa-fw
- | Bejegyzés hozzáadása
+ | Munkavégzés hozzáadása
button#btnSave2.btn.btn-primary(data-toggle='modal', disabled, type='button')
i.fa.fa-save.fa-lg.fa-fw
| Mentés
@@ -96,11 +97,11 @@ block content
`${i} | `+
`${item.Title} | `
$.each(item.employeeList,function(idx,employee){
-
-
+ var rid
+ if (item._id){ rid=item._id} else {rid=item.cid}
if (idx==0){
newRow+=`${employee.name} | `+
- ` | `
+ ` | `
newRow+= ``
} else
{
@@ -131,7 +132,13 @@ block content
}
- console.log(da)
+
+ $.each(da.workFlow,function(i,item){
+ if (item.cid) {
+ delete item.cid;
+ console.log ("Del");
+ }
+ })
// Adatok mentése szerverre
const response = fetch('/workreportUpdate', {
@@ -173,7 +180,7 @@ block content
}
})
- .catch(error => console.error('Error:', error));
+ .catch(error => console.error('Error:', error));
});
})