WorkReport hozzáadás működik

This commit is contained in:
Vincze József 2025-01-10 15:35:48 +01:00
parent 159c6824f5
commit 0beb80773a
16 changed files with 1091 additions and 42 deletions

9
app.js
View File

@ -24,7 +24,7 @@ var PdfPrinter=require('pdfmake');
//const util = require('util');
//var currentWorkNumber=0;
const { XMLParser, XMLBuilder, XMLValidator} = require("fast-xml-parser/src/fxp");
//var apkUpdater = require('apk-updater');
const { apiSaveReport, apiGetReport, apiGetReportList, apiGetUsers } = require('./js/workReport.js');
const fss = require('fs');
global.currentWorkNumber=0;
@ -1870,6 +1870,10 @@ app.get('/media/:file', function(req, res) {
});
app.route('/workreport').post(apiSaveReport);
app.route('/workreportUserList').get(apiGetUsers);
app.route('/workreport/:id').get(apiGetReport);
app.route('/workreportList/:id').get(apiGetReportList);
// Route Files
app.locals.moment = require('moment');
@ -1899,6 +1903,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');
app.use('/devicesrfid', devices_rfid);
app.use('/vehicles', vehicles);
app.use('/gantt', gantt);
@ -1919,6 +1924,8 @@ app.use('/certificates_mc',certificates_mc);
app.use('/components',components);
app.use('/components_base',components_base);
app.use('/quotes',quotes);
// Kábel mérési jegyzőkönyv
//apkUpdater.enable(app, '/anyUpdateServerRoute');
/*
app.delete('/devices/:id',utils.ensureAuthenticated,function(req,res){

BIN
docs/kabelcert.docx Normal file

Binary file not shown.

Binary file not shown.

View File

@ -98,7 +98,7 @@ const CM_Fetch_WorkNumbers=async()=>
foundWork.body!=element.Megjegyzes ||
foundWork.poNumber!=element.KulsoRendSzam ||
foundWork.megrendelo!=element.SzamlNev ||
foundWork.workNumber!=element.Szovertek ||
// foundWork.workNumber!=element.Szovertek ||
foundWork.cmRendAzonosito!=element.RendAzon)
{
if (element.ID==foundWork.cmId)

154
js/kabelCertApi.js Normal file
View File

@ -0,0 +1,154 @@
let KabelCert = require('../models/kabelcert');
const asyncHandler = require('express-async-handler');
const moment = require('moment');
exports.apiSaveKabelCert=asyncHandler(async (req,res)=>{
const {megrendelo, id, wn,targy, tipus,userid, keresztmetszet, feszultseg, hossz, nyomvonal }=req.body;
const kabelcert = new KabelCert({
deviceId: id,
author: userid,
jkvTitle: targy,
megrendelo: megrendelo,
hossz:hossz,
tipus: tipus,
munkaszam: wn,
feszultseg: feszultseg,
nyomvonal: nyomvonal,
keresztmetszet: keresztmetszet
})
await kabelcert.save();
res.setHeader('Content-Type', 'application/json');
res.send({'response':'ok','message':'Sikeresen létrehozva!','id':id});
});
exports.apiEditKabelCert=asyncHandler(async (req,res)=>{
const {megrendelo, id, modify, wn,targy, tipus,userid, keresztmetszet, feszultseg, hossz, nyomvonal }=req.body;
const kabelcert = {
//deviceId: id,
//author: userid,
jkvTitle: targy,
megrendelo: megrendelo,
hossz:hossz,
tipus: tipus,
//munkaszam: wn,
feszultseg: feszultseg,
nyomvonal: nyomvonal,
keresztmetszet: keresztmetszet
}
await KabelCert.findByIdAndUpdate(modify,kabelcert)
res.setHeader('Content-Type', 'application/json');
res.send({'response':'ok','message':'Sikeresen létrehozva!','id':id});
});
exports.apiGetKabelCerts=asyncHandler(async (req,res)=>{
const { id }=req.params;
const certs = //await KabelCert.find({'deviceId':id})
await KabelCert.aggregate([
{
"$match": { "deviceId": "674ec583ac87012afa6d5897" }
},
{
$lookup: {
from: "users",
localField: "author",
foreignField: "_id",
as: "user",
}
},
{ "$unwind": "$user" },
/*{ "$project": {
"user.name": 1,
}
}*/
])
res.status(200).send(certs);
});
exports.apiDeleteKabelCerts=asyncHandler(async (req,res,next)=>{
const { id }=req.params;
const result= await KabelCert.deleteOne({_id:id})
if (!result)
{
res.setHeader('Content-Type', 'application/json');
res.send({'response':'Fail','message':'Művelet sikertelen!'});
}
else
{
res.setHeader('Content-Type', 'application/json');
res.send({'response':'ok','message':'Sikeresen törölve!'});
}
});
exports.apiGenerateKabelCert=asyncHandler(async(req,res,next)=>{
const { id }=req.params;
const cert=await KabelCert.findById(id);
if (!cert)
{
res.setHeader('Content-Type', 'application/json');
res.send({'response':'Fail','message':'Művelet sikertelen!'});
return;
}
var deviceDate= new Date().toISOString().replace(/-/g, '.').substring(0,10);
const PizZip = require("pizzip");
var Docxtemplater = require('docxtemplater');
var fs = require('fs');
var path = require('path');
//Load the docx file as a binary
var content = fs
.readFileSync(__dirname+'/../docs/templates/kof/kof_kabelvizsgalat.docx', 'binary');
const zip = new PizZip(content);
var doc = new Docxtemplater();
doc.loadZip(zip);
var year=new Date().getFullYear();
//set the templateVariables
var gyev=cert.gyariszam.substring(0,4);
//console.log('Megvan!');
doc.setData({
jkvszam: 1,
megrendelo: cert.megrendelo,
datum:moment().format("YYYY.MM.DD"),
vizsgalattargya: cert.targy,
tipus:cert.tipus,
keresztmetszet:cert.keresztmetszet,
feszultseg: cert.feszultseg,
hossz:cert.hossz,
});
try {
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
//console.log('Generálás kész!');
doc.render();
}
catch (error) {
var e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
}
console.log(JSON.stringify({error: e}));
// The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
throw error;
}
var buf = doc.getZip()
.generate({type: 'nodebuffer'});
//logging.logAppend("Jegyzőkönyv módosítva.",req.user,kofmb.id,KifCert.db.name,'CERTEDIT');
fs.writeFileSync(__dirname+'/../docs/kabelcert.docx', buf);
//req.flash('success','Berendezés sikeresen hozzáadva');
res.download(path.normalize(__dirname+'/../docs/kabelcert.docx'),'KÖF_Kabel_szigetelesvizsgalat.docx');
})

126
js/workReport.js Normal file
View File

@ -0,0 +1,126 @@
let WorkReport = require('../models/workReportModel');
let Employee = require('../models/employee');
const asyncHandler = require('express-async-handler');
var mongoose = require('mongoose');
const moment = require('moment');
exports.apiSaveReport=asyncHandler(async (req,res)=>{
const {workId,foremanId,date, workTitle,employeeList }=req.body;
const workReport = new WorkReport({
workId: mongoose.Types.ObjectId(workId),
date:new Date(date),
foremanId: mongoose.Types.ObjectId(foremanId),
workTitle: workTitle,
employeeList: employeeList
})
res.setHeader('Content-Type', 'application/json');
try{
await workReport.save();
res.send({'response':'ok','message':'Sikeresen létrehozva!'});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
exports.apiGetReport=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
res.send({'response':'ok','reports':reports});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
// Felhasználói adatok
exports.apiGetUsers=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const users=await Employee.find({'konyvelesre': 'on'},{_id:1,name:1},{sort: {name: 1}})
res.send({'response':'ok','users':users});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
exports.apiGetReportList=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const reports=await WorkReport.aggregate([
{$match: {"workId": mongoose.Types.ObjectId(req.params.id)}},
{
$lookup:
{
from: "employees",
localField: "employeeList.employeeId",
foreignField: "_id",
as: "employee"
},
},
/* {
$unwind: "$employee"
},*/
/* {
$unwind: "$employeeList"
},*/
{$group: { _id:{
'wf': '$employeeList.workFlow',
'wid': '$_id',
'name': '$employee.name',
},
'id':{$first: '$_id'},
'date':{$first:'$date'},
'name': {$first:'$employee.name'},
'workFlow':{$first: '$employeeList.workFlow'},
},
},
{
// cleanup
$project: {
_id: false,
}
}
])
var wof=[];
reports.forEach(element => {
const curDate=moment(element.date).format("YYYY.MM.DD");
var wdays=wof.find(e=>e.date===curDate);
var items=[]
if (wdays) //ha már van ilyen nap
{
items=[]
element.name.forEach((elem,idx)=>{
wdays.items.push({name:elem,workFlow:element.workFlow[idx]})
})
// wdays.items.push(items)
}
else
{
items=[]
element.name.forEach((elem,idx)=>{
items.push({name:elem,workFlow:element.workFlow[idx]})
})
var day={date:curDate,items:items}
wof.push(day)
}
});
res.send({'response':'ok','reports':wof});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a lekérdezésnél !\n'+err.message});
}
});

87
models/kabelcert.js Normal file
View File

@ -0,0 +1,87 @@
let mongoose = require('mongoose');
var CounterSchema = mongoose.Schema({
name: {type: String, required: true},
seq: { type: Number, default: 0 }
});
var counter = mongoose.model('counter', CounterSchema);
// KifCert Schema
let kabelCertSchema = mongoose.Schema({
// Jegyzőkönyv azonosító
deviceId:{
type: String,
require: true
},
// Létrehozás dátuma
bornDate:{
type: Date,
require: true
},
// Létrehozó
author:{
type: mongoose.Schema.Types.ObjectId,
require: true
},
// Jegyzőkönyv neve
jkvTitle:{
type: String,
require: true
},
// Megrendelő
megrendelo:{
type: String,
require: true
},
// Hossz
hossz:{
type: Number,
require: true
},
// Típus
tipus:{//
type: String,
require: true
},
// Munka szam
munkaszam:{//
type: String,
require: true
},
// Gyartasi szam
gyariszam:{//
type: String,
require: true
},
// Névleges feszültség
feszultseg:{
type: String,
require: true
},
// Keresztmetszet
keresztmetszet:{
type: String,
require: true
},
// Védettség
nyomvonal:{
type: String,
require: true
},
});
kabelCertSchema.pre('save', function(next) {
var doc = this;
var year = new Date().getFullYear().toString().slice(-2);
counter.findOneAndUpdate({name: 'kabelcert'}, {$inc: { seq: 1} },{ new: true, upsert: true }, function(error, counter) {
if(error)
return next(error);
const padded = (counter.seq + "").padStart(3, "0");
doc.gyariszam = 'KL/'+padded+'/'+year;
next();
});
});
var KabelCert = module.exports = mongoose.model('KabelCert',kabelCertSchema);

16
models/workReportModel.js Normal file
View File

@ -0,0 +1,16 @@
let mongoose = require('mongoose');
let workReportSchema = mongoose.Schema({
// Napi jelentés
workId:{type: mongoose.Schema.Types.ObjectId},
date: {type: Date},
foremanId: {type: String},
workTitle: {type: String},
employeeList:[{
employeeId:{type: mongoose.Schema.Types.ObjectId},
workFlow: {type: String},
}]
})
let WorkReport = module.exports = mongoose.model('WorkReport', workReportSchema);

View File

@ -77,6 +77,7 @@ let workSchema = mongoose.Schema({
workTitle: {type: String},
employeeList:[{type: mongoose.Schema.Types.ObjectId}]
}],
//devicesArray: ['Article']
devicesArray: [{type: mongoose.Schema.Types.ObjectId}]
});

View File

@ -13,3 +13,6 @@ table.mystyle{
background-color: #dddddd;
}
}
.table-clickable tbody tr {
cursor: pointer;
}

View File

@ -11,7 +11,7 @@ $(document).ready(function(){
const id = $target.attr('data-id');
$.ajax({
type: 'DELETE',
url: '/articles/A/'+id,
url: '/delete/articles/A/'+id,
success: function(response){
alert('Deleting Article');
window.location.href='/';
@ -30,7 +30,7 @@ $(document).ready(function(){
const fp = $target.attr('file-path');
$.ajax({
type: 'DELETE',
url: '/articles/F/'+fn,
url: '/delete/articles/F/'+fn,
success: function(response){
alert('Deleting Article');
window.location.href='/';

View File

@ -18,6 +18,8 @@ var mv = require('mv');
var ad=false;
var Encoder = require("code-128-encoder");
var Jimp = require("jimp");
const { apiSaveKabelCert, apiGetKabelCerts, apiDeleteKabelCerts, apiEditKabelCert, apiGenerateKabelCert } = require('../js/kabelCertApi');
var idCounter=0;
@ -101,7 +103,7 @@ Article.findOneAndRemove({_id: id}, function(err){
});*/
// Delete Article
router.delete('/:mode/:id', function(req, res){
router.delete('delete/:mode/:id', function(req, res){
/* if(!req.user._id){
res.status(500).send();
}*/
@ -136,6 +138,12 @@ router.delete('/:mode/:id', function(req, res){
}
});
router.route('/deletekabelcerts/:id').delete(apiDeleteKabelCerts);
// Kábel mérési jegyzőkönyv
router.route('/savekabelcerts').post(apiSaveKabelCert);
router.route('/modifykabelcerts').post(apiEditKabelCert);
router.route('/generatecert/:id').get(apiGenerateKabelCert);
router.route('/getkabelcerts/:id').get(apiGetKabelCerts);
// Storage file name to id
var storage = multer.diskStorage({
@ -619,6 +627,7 @@ router.get('/:id/:wid',utils.ensureAuthenticated,function(req,res){
Article.findById(req.params.id,function(err,article)
{
if (!article) return;
User.findById(article.author, function(err,user){
var wid=req.params.wid;
const testFolder = '/'+article.filePath;

View File

@ -0,0 +1,170 @@
#jkvkabelModal.modal(tabindex='-1', role='dialog', aria-labelledby='jkvkabelModalLabel')
//-form(method='GET',id='holidayForm' action='/employee/holidays_byperson/')
.modal-dialog(role='document', style='width:1000px;')
.modal-content
.modal-header#jkvkabelHeader.bg-primary(style="background: Primary")
h4#headertitle
.modal-body(style='background-color:#5f6b79')
form#kabelform
#form-group
input#wn(name='wn',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="megrendelo",style='color: white') Megrendelő:
input.form-control(id='megrendelo', name='megrendelo', required, minlength="6", type=text, autofocus, readonly=false,style='')
hr
.row
.col-sm-12
label(for="targy",style='color: white') A vizsgálat tárgya:
input.form-control(id='targy',name='targy', required, minlength="6",type=text, autofocus, readonly=false,style='')
hr
.row
.col-sm-3
label(for="tipus",style='color: white') Típus:
input.form-control(id='tipus', name='tipus', required, minlength="6",type=text, autofocus, readonly=false,style='')
.col-sm-2
label(for="keresztmetszet",style='color: white') Keresztmetszet:
input.form-control(id='keresztmetszet', name='keresztmetszet', required, minlength="6",type=text, autofocus, readonly=false,style='')
.col-sm-3
label(for="feszultseg",style='color: white') Névleges feszültség:
select.form-control(id='feszultseg', name='feszultseg',required,data-live-search='true')
option.selected.disabled(data-tokens='') Válasszon!
option(value='10') 6/10kV
option(value='20') 12/20kV
option(value='30') 18/30kV
option(value='36') 20/36kV
.col-sm-2
label(for="hossz",style='color: white') Hossz:
input.form-control(id='hossz',name='hossz', required, minlength="1",type=text, autofocus, readonly=false,style='')
br
.row
.col-sm-12
label(style='color: white') Lefektetés helye:
input.form-control(id='nyomvonal',name='nyomvonal',type=text, autofocus, readonly=false,style='')
br
button#submit.btn.btn-primary(type='submit' ) Rendben
.modal-footer(style="background-color: #2C3446")
button#fmodalClose.btn.btn-primary(type='button', data-dismiss='modal') Bezár
script(src='/bower_components/jquery/dist/jquery.min.js')
//-script(src='/bower_components/bootstrap-validator/dist/validator.min.js')
script.
$(document).on('show.bs.modal','#jkvkabelModal', function () {
const form = document.getElementById('kabelform');
form.reset();
var articletitle = $(event)[0].currentTarget.activeElement.getAttribute('data-title')
var megrendelo = $(event)[0].currentTarget.activeElement.getAttribute('data-megrendelo')
var tipus = $(event)[0].currentTarget.activeElement.getAttribute('data-tipus')
var keresztmetszet = $(event)[0].currentTarget.activeElement.getAttribute('data-keresztmetszet')
var hossz = $(event)[0].currentTarget.activeElement.getAttribute('data-hossz')
var nyomvonal = $(event)[0].currentTarget.activeElement.getAttribute('data-nyomvonal')
var feszultseg = $(event)[0].currentTarget.activeElement.getAttribute('data-feszultseg')
//var modify = $(event)[0].currentTarget.activeElement.getAttribute('data-modify')
var title = $(event)[0].currentTarget.activeElement.getAttribute('data-headertitle')
var articleNumber = $(event)[0].currentTarget.activeElement.getAttribute('data-sn')
var articleWorkNumber = $(event)[0].currentTarget.activeElement.getAttribute('data-wn')
var articleId = $(event)[0].currentTarget.activeElement.getAttribute('data-aid')
var editId = $(event)[0].currentTarget.activeElement.getAttribute('data-id')
$('#targy').val(articletitle);
$('#headertitle').text(title);
$('#id').val(articleId);
$('#wn').val(articleWorkNumber);
console.log(modify)
if (megrendelo)
{
$('#megrendelo').val(megrendelo);
}
if (tipus)
{
$('#tipus').val(tipus);
}
if (keresztmetszet)
{
$('#keresztmetszet').val(keresztmetszet);
}
if (hossz)
{
$('#hossz').val(hossz);
}
if (nyomvonal)
{
$('#nyomvonal').val(nyomvonal);
}
if (feszultseg)
{
$('#feszultseg').val(feszultseg);
}
$('#modify').val(editId);
})
const form = document.getElementById('kabelform');
//form.validator().on('submit', async function (e) {
form.addEventListener('submit', async event => {
event.preventDefault();
const formData = new FormData(form);
const plainFormData = Object.fromEntries(formData.entries());
const formDataJsonString = JSON.stringify(plainFormData);
var url='/articles/savekabelcerts'
if (plainFormData.modify)
{
url='/articles/modifykabelcerts'
}
const response = await fetch(url, {
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: formDataJsonString
});
const data = await response.json();
if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="OK")
{
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
refreshCerts(data.id)
} else
{
Swal.fire({
position: "top-end",
icon: "error",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
}
$('#jkvkabelModal').modal('hide');//.modal('toggle');
$('.modal').removeClass('in');
$('.modal').attr("aria-hidden","true");
$('.modal').css("display", "none");
$('.modal-backdrop').remove();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove()
});
$(document).ready(function () {
});

View File

@ -0,0 +1,231 @@
#workReportModal.modal(tabindex='-1', role='dialog', aria-labelledby='workReportModalLabel')
//-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#workReportHeader.bg-primary(style="background: Primary")
h4#headertitle
.modal-body(style='background-color:#5f6b79')
form#kabelform
#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
input(id='datepicker',style='display:none', type=text)
hr
.row
.col-sm-12
label(for="workFlow",style='color: white') Munka leírása:
input.form-control(id='workFlow', name='workFlow', required, minlength="6",type=text, autofocus, readonly=false,style='')
br
.row
.col-sm-12
#buttons(style="margin: 10px;")
h4#arc
br
//button#submit.btn.btn-primary(type='submit' ) Rendben
button#sendData.btn.btn-primary(type='button') Rendben
.modal-footer(style="background-color: #2C3446")
button#fmodalClose.btn.btn-primary(type='button', data-dismiss='modal') Bezár
script(src='/bower_components/jquery/dist/jquery.min.js')
//-script(src='/bower_components/bootstrap-validator/dist/validator.min.js')
script.
var workers=[]
const form = document.getElementById('kabelform');
function handleClick(identifier) {
const state=$(identifier).hasClass('active');
//const d=JSON.parse(decodeURIComponent($(identifier).data('item')))
const d=$(identifier).data('id')
if (!state)
{
workers.push({employeeId:d,workFlow:""});
}
else
{
workers=workers.filter(obj=>obj._id!==d._id);
}
// alert("data-id:"+JSON.stringify(workers) );
$('#arc').text(JSON.stringify(workers))
}
function textChanged(){
var length=document.getElementById("workFlow").value.length
if (length>3)
{
let divElement = document.getElementById("buttons");
$.each(divElement.children,function(i,item){
item.disabled=false
})
}else{
let divElement = document.getElementById("buttons");
$.each(divElement.children,function(i,item){
item.disabled=true
item.classList.remove("active")
})
workers=[]
}
}
$(document).ready(function () {
var wid = document.getElementById ('wn').textContent;
var uid = document.getElementById ('user_id').textContent;
var selectedDate="";
const title=document.getElementById ('title').textContent;
var picker = new Lightpick({ field: document.getElementById('datepicker'),
singleDate: true,
inline: true,
numberOfColumns: 2,
numberOfMonths: 2,
format: 'YYYY.MM.DD',
disableWeekends: false,
maxDate: moment(),
onSelect: function(date){
selectedDate=date
}
});
document.getElementById("workFlow").onkeydown = function() {
textChanged();
};
$('#workFlow').change(function(event) {
//do stuff with the "event" object as the object that called the method
textChanged();
}
);
document.getElementById('sendData').addEventListener('click', function(a) {
const workFlow = document.getElementById('workFlow').value;
if(selectedDate.length)
{
Swal.fire('Error', '', 'error')
}
$.each(workers,function(i,w){
w.workFlow=workFlow
})
var dataa={
date: selectedDate,
workId:wid,
foremanId:uid,
workTitle:title,
employeeList:workers
}
const response = fetch('/workreport', {
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(dataa)
})
.then(response => response.json())
.then(data => {
//console.log(data)
if (!data.response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="ok")
{
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} else
{
Swal.fire({
position: "top-end",
icon: "error",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
}
$('#workReportModal').modal('hide');//.modal('toggle');
$('.modal').removeClass('in');
$('.modal').attr("aria-hidden","true");
$('.modal').css("display", "none");
$('.modal-backdrop').remove();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove()
})
.catch(error => console.error('Error:', error));
})
/* if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (resp.response="OK")
{
Swal.fire({
position: "top-end",
icon: "success",
title: resp.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} else
{
Swal.fire({
position: "top-end",
icon: "error",
title: resp.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} */
//});
$(document).on('show.bs.modal','#workReportModal', function () {
form.reset();
let divElement = document.getElementById("buttons");
while (divElement.firstChild) {
divElement.removeChild(divElement.firstChild);
}
selectedDate="";
//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));
$('<button class="btn btn-primary aaa" disabled onclick="handleClick(this)" data-item="'+data_str+'" data-id="'+item._id+'" style="width:150px;margin: 3px" data-toggle="button" type="button">'+item.name+'</button>').appendTo('#buttons');
})
})
.catch(error => console.error('Error:', error));
})
});

View File

@ -2,10 +2,17 @@ extends layout
block content
.mainContainer
link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.min.css')
link(rel='stylesheet' href='/bower_components/bootstrap-select/dist/css/bootstrap-select.css')
link(rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.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_jkv_kabel
.panel.panel-primary
.panel-heading
h4 Berendezés: #{article.title}
h4#articleId(style='display:none') #{article._id}
h4#articleSn(style='display:none') #{article.deviceNumber}
.panel-body
#form-group
div.row
@ -62,18 +69,20 @@ block content
h4 Hozzáadott jegyzőkönyvek
.panel-body
.row
main.col-sm-9.ml-sm-auto.col-md-10.pt-3(role='main')
container
.table-responsive
table.table.table-striped(style='background-color:#FFFFE0;')
table#certsTable.table.table-striped.table-hover
thead
tr
th #
th Kábelszám
th Megnevezés
th Típus
th Létrehozva
th Készítő
th Művelet
tbody
each cert, i in certs
//-each cert, i in certs
tr
td #{i+1}
td
@ -102,7 +111,9 @@ block content
a.btn.btn-primary(href='/certificates_tr/kofcertnew/'+article._id) Új TR jegyzőkönyv
.btn-group(role='group')
a.btn.btn-primary(href='/certificates_mc/kofcertnew/'+article._id) Új Mérőcella jkv
.btn-group(role='group')
button.btn.btn-primary(data-toggle='modal', data-wn=article.workNumber,data-aid=article._id,data-sn=article.deviceNumber,data-title=article.title, data-target='#jkvkabelModal',data-headertitle='Kábel szigetelés vizsgálat',style='width:40px;',type='button')
i.fa.fa-cogs
.panel.panel-primary
.panel-heading
h4 Hozzáadott dokumentumok
@ -111,7 +122,7 @@ block content
main.col-sm-9.ml-sm-auto.col-md-10.pt-3(role='main')
h2 Hozzáadott dokumentumok
.table-responsive
table.table.table-striped(style='background-color:#FFFFE0;')
table.table.table-hover.table-striped(style='background-color:#FFFFE0;')
thead
tr
th #
@ -236,36 +247,189 @@ block content
.clearfix
div(style='padding:6px;')
br
script(src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js')
//-script(src='/bower_components/bootstrap-table/dist/bootstrap-table.min.js')
-//script(src='/bower_components/jquery/dist/jquery.js')
-//script(src='https://code.jquery.com/jquery-1.10.2.js')
script(src='/js/upload.js')
script(src='/js/main.js')
script(src='/js/removeFile.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.
// Jegyzőkönyvek listázása
var createTable=function (data,articleId)
{
$('#certsTable > tbody').empty();
if (data)
{ const articleSn=$('#articleSn').text();
$.each(data,function(i,el){
var url2="https://google.com"
var newRow=$('<tr id='+el._id+'>'+
'<td style="text-align:left">'+(i+1)+'</td>'+
'<td style="text-align:left">'+el.gyariszam+'</td>'+
'<td style="text-align:left">'+el.jkvTitle+'</td>'+
'<td style="text-align:left"> Kábel'+'</td>'+
'<td style="text-align:left">'+moment(el.bornDate).format("YYYY.MM.DD")+'</td>'+
'<td style="text-align:left">'+el.user.name+'</td>'+
'<td>'+'<div class="btn-group" role="group" aria-label="Basic example">'+
//-data-toggle='modal',data-wn=article.workNumber,data-id=article._id,data-sn=article.deviceNumber,data-title=article.title, data-target='#jkvkabelModal',data-headertitle='Kábel szigetelés vizsgálat',
'<button type="button" class="btn btn-warning" data-id="'+el._id+'" data-headertitle="Kábel szigetelés vizsgálat módosítás" data-sn="'+articleSn+'" data-feszultseg="'+el.feszultseg+'" data-title="'+el.jkvTitle+'" data-megrendelo="'+el.megrendelo+'" data-tipus="'+el.tipus+'" data-keresztmetszet="'+el.keresztmetszet+'" data-hossz="'+el.hossz+'" data-nyomvonal="'+el.nyomvonal+'" data-aid="'+articleId+'" data-toggle=modal data-target=#jkvkabelModal style="width:40px;"><i class="fa fa-edit"></i></button>'+
'<button id="ajaxPrint" type="button" class="btn btn-success" data-id="'+el._id+'", style="width:40px;"><i class="fa fa-print"></i></button>'+
'<button id="ajaxDelete" type="button" class="btn btn-danger" data-title="'+el.jkvTitle+'" data-id="'+el._id+'", style="width:40px;"><i class="fa fa-trash"></i></button>'+
'</div></td>'+
'</tr>');
$('#certsTable > tbody:last-child').append (newRow);
})
}
}
//Jegyzőkönyv nyomtatás
$(document).on("click","#ajaxPrint",async function(e)
{
var id = $(this).data('id');
var title = $(this).data('title');
const result= await Swal.fire(
{
title: "Biztosan törli a jegyzőkönyvet? ",
text: title+" véglegesen törlésre kerül!",
icon: "question",
showDenyButton: true,
confirmButtonText: 'Igen',
denyButtonText: 'Nem',
customClass: {
actions: 'my-actions',
confirmButton: 'order-2',
denyButton: 'order-3',
},
}
);
if (result.isConfirmed)
{
console.log("Generating: "+id)
location.href="/articles/generatecert/"+id
/* const response = await fetch("/articles/generatecert/"+id,
{
headers: {
"Content-Type": "application/json",
},
method: "POST"
});
const data = await response.json();
if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="OK")
{
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} else
{
Swal.fire({
position: "top-end",
icon: "error",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} */
//refreshCerts(id)
}
});
//Jegyzőkönyv törlése
$(document).on("click","#ajaxDelete",async function(e)
{
var id = $(this).data('id');
var title = $(this).data('title');
console.log("DataId: "+id+"\nHolidayId: "+title);
const result= await Swal.fire(
{
title: "Biztosan törli a jegyzőkönyvet? ",
text: title+" véglegesen törlésre kerül!",
icon: "question",
showDenyButton: true,
confirmButtonText: 'Igen',
denyButtonText: 'Nem',
customClass: {
actions: 'my-actions',
confirmButton: 'order-2',
denyButton: 'order-3',
},
}
);
if (result.isConfirmed)
{
console.log("Deleting: "+id)
const response = await fetch("/articles/deletekabelcerts/"+id,
{
headers: {
"Content-Type": "application/json",
},
method: "DELETE"
});
const data = await response.json();
if (!response.ok)
{
Swal.fire('Error', '', 'error')
}
if (data.response="OK")
{
Swal.fire({
position: "top-end",
icon: "success",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
} else
{
Swal.fire({
position: "top-end",
icon: "error",
title: data.message,
showConfirmButton: false,
timer: 1500,
backdrop: false
});
}
refreshCerts(id)
}
});
const refreshCerts=function(id)
{
$.get('/articles/getkabelcerts/'+id,function(data)
{
createTable(data,id);
const tableRows = document.querySelectorAll(".table-clickable tbody tr");
for (const tableRow of tableRows) {
tableRow.addEventListener("click", function () {
window.open(this.dataset.href, "_blank");
});
}
})
}
$(document).ready(function () {
const id=$('#articleId').text();
refreshCerts(id)
})
script(src='https://code.jquery.com/jquery-1.10.2.js')
script(src='/js/upload.js')
script(src='/js/main.js')
script(src='/js/removeFile.js')
//script(src='/socket.io/socket.io.js')
//script.
$('.upload-btn').on('click', function (){
$('.progress-bar').text('0%');
$('.progress-bar').width('0%');
$(".progress-bar").fadeIn('fast');
});
var socket = io.connect('localhost:80');
socket.on('connect', function(data) {
socket.emit('join', 'Hello World from client');
socket.on('messages', function(data) {
console.log(data);
$('.progress-bar').text(data + '%');
$('.progress-bar').width(data + '%');
if(data === 100 ){ // do whatever want to do after 100% complete
var hideProg = setTimeout(function() {
$(".progress-bar").fadeOut('slow');
}, 2000);
}
});
});

View File

@ -4,6 +4,9 @@ block content
.container
link(rel='stylesheet' href='/bower_components/bootstrap/dist/css/bootstrap.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="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_workReport
style(type="text/css").
@ -33,13 +36,14 @@ block content
#form-group
.panel.panel-primary
.panel-heading
h4 #{work.title}
h4#title #{work.title}
.panel-body
div.row
div.col-md-2
h4(id='wn',style='display:none;') #{work.id}
h4(id='entemp',style='display:none;') #{work.enaploTemplate}
h4(id='user_id',style='display:none;') #{user._id}
h4(style="text-align:right;") Munka szám:
h4(style="text-align:right;") PO szám:
h4(style="text-align:right;") CMR Rendszám:
@ -161,7 +165,47 @@ block content
//-button(type='submit' name='a' form='form-1')
//-button.btn.btn-primary(id=report._id,form="myForm",type='submit',formaction='/work/generateXML/'+work._id+'/'+report._id, value='enaplo',tabindex='56')
//-button.btn.btn-secondary.button-spacer(id=report._id,form="myForm", data-wid=work._id,data-rid=report._id, type='submit')
br
br
.panel.panel-primary( data-toggle="collapse")
.panel-heading
.row
.col-md-9
h4 Műhely munkavégzés
.col-md-1
.col-md-2.float-right
span.pull-right.clickable
i.glyphicon.glyphicon-chevron-up
#collapsePanel.panel-body
form#form-1
.row
.table-responsive
table#workReportTable.table.table-striped
col(width='5%')
col(width='10%')
col(width='15%')
col(width='auto')
if (work.enaploTemplate)
col(width='5%')
thead
tr
th #
th(style='text-align:left') Dátum
th(style='text-align:left') Résztvevők
th(style='text-align:left') Munkavégzés leírása
tbody
.panel-footer
.btn-toolbar
if(user.canAdd.device)
button.btn.btn-primary(data-toggle='modal', data-wn=work._id,data-title=work.title, data-target='#workReportModal',data-headertitle='Műhely munkavégzés',type='button')
i.fa.fa-plus.fa-lg.fa-fw
| Bejegyzés hozzáadása
br
.panel.panel-primary
.panel-heading
h4 Berendezések:
@ -204,9 +248,46 @@ block content
script(type='text/javascript', src='/bower_components/moment/min/moment.min.js')
script(type='text/javascript',src='/build/pdfmake.js')
script(type='text/javascript',src='/build/vfs_fonts.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.
$(document).ready(function () {
//Fetch workReport
var wid = document.getElementById ('wn').textContent;
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="<tr><td>"+(i+1)+"</td>"
newRow+=
'<td style="text-align:left">'+moment(new Date(item.date)).format('YYYY.MM.DD')+'</td>'
//'<td style="text-align:right">'+item.workTitle+'</td>'
newRow+='<td>'
$.each(item.items,function(i,employee){
newRow+=employee.name+'<br>'
});
newRow+='</td>'
newRow+='<td>'
$.each(item.items,function(i,wf){
newRow+=wf.workFlow+'<br>'
});
newRow+='</td>'
newRow+='</tr>';
$('#workReportTable > tbody:last-child').append (newRow);
})
})
.catch(error => console.error('Error:', error));
document.getElementById('enaploImp').addEventListener('change', readFile, false);
/* var entemplate = document.getElementById ('entemp').textContent;
if (entemplate){