diff --git a/app.js b/app.js index 69ee7bc..633e8fe 100644 --- a/app.js +++ b/app.js @@ -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){ diff --git a/docs/kabelcert.docx b/docs/kabelcert.docx new file mode 100644 index 0000000..1b170e0 Binary files /dev/null and b/docs/kabelcert.docx differ diff --git a/docs/templates/kof/kof_kabelvizsgalat.docx b/docs/templates/kof/kof_kabelvizsgalat.docx new file mode 100644 index 0000000..8bccf3d Binary files /dev/null and b/docs/templates/kof/kof_kabelvizsgalat.docx differ diff --git a/js/cmHelper.js b/js/cmHelper.js index 8bfa1fb..1226c39 100644 --- a/js/cmHelper.js +++ b/js/cmHelper.js @@ -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) diff --git a/js/kabelCertApi.js b/js/kabelCertApi.js new file mode 100644 index 0000000..b9b14a5 --- /dev/null +++ b/js/kabelCertApi.js @@ -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'); + + +}) \ No newline at end of file diff --git a/js/workReport.js b/js/workReport.js new file mode 100644 index 0000000..0882395 --- /dev/null +++ b/js/workReport.js @@ -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}); + } + +}); \ No newline at end of file diff --git a/models/kabelcert.js b/models/kabelcert.js new file mode 100644 index 0000000..0e335fb --- /dev/null +++ b/models/kabelcert.js @@ -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); \ No newline at end of file diff --git a/models/workReportModel.js b/models/workReportModel.js new file mode 100644 index 0000000..8f5adb9 --- /dev/null +++ b/models/workReportModel.js @@ -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); \ No newline at end of file diff --git a/models/works.js b/models/works.js index 030d7fb..8939bf4 100644 --- a/models/works.js +++ b/models/works.js @@ -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}] }); diff --git a/public/css/table.css b/public/css/table.css index d561ebb..d82b165 100644 --- a/public/css/table.css +++ b/public/css/table.css @@ -13,3 +13,6 @@ table.mystyle{ background-color: #dddddd; } } +.table-clickable tbody tr { + cursor: pointer; +} \ No newline at end of file diff --git a/public/js/main.js b/public/js/main.js index 50ceccb..8a363e6 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -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='/'; diff --git a/routes/articles.js b/routes/articles.js index cdbe1e7..cb16cb6 100644 --- a/routes/articles.js +++ b/routes/articles.js @@ -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; diff --git a/views/Modals/modal_jkv_kabel.pug b/views/Modals/modal_jkv_kabel.pug new file mode 100644 index 0000000..e093bee --- /dev/null +++ b/views/Modals/modal_jkv_kabel.pug @@ -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 () { + + + }); \ No newline at end of file diff --git a/views/Modals/modal_workReport.pug b/views/Modals/modal_workReport.pug new file mode 100644 index 0000000..4a5c3dd --- /dev/null +++ b/views/Modals/modal_workReport.pug @@ -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)); + $('').appendTo('#buttons'); + }) + }) + .catch(error => console.error('Error:', error)); + }) + + }); \ No newline at end of file diff --git a/views/article.pug b/views/article.pug index cdab248..fbf2a85 100644 --- a/views/article.pug +++ b/views/article.pug @@ -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=$('