const express = require('express'); const router = express.Router(); const numeral = require('numeral'); const moment = require('moment'); let Client = require('../models/client'); // Bring in article module let Invoice = require('../models/invoice'); // User Model let User = require('../models/user'); var utils = require('../js/utils'); const path = require('path'); var schedule = require('node-schedule'); var pdfMake = require('pdfmake'); var nodemailer = require('nodemailer'); function tsep(num) { var i=0; var num_parts = num.toString().split("."); num_parts[0] = num_parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, " "); return num_parts.join("."); }; var j = schedule.scheduleJob('00 00 10 * * * ', function(){ //console.log('The answer to life, the universe, and everything!'); Invoice.find({'state':'3'},function(err, invoices){ if (err) { console.log(err); } else { sendEmailNotify(invoices); } }); }); // Find clients on keypress // Find Clients on keypress router.post('/find', utils.ensureAuthenticated,function (req,res) { let man=new Item(); var findman=Item.findOne( {'name' : req.body.content}); var q = Client.find({'name': new RegExp(req.body.content, 'i')}).limit(20); var response = { status : 200, data : 'null' } q.exec(function(err,t){ if (err) { console.log(err); return; } if (t) { t.forEach(function(tetel){ //console.log('Tools find:' +tetel.name); }) response = { status : 200, data : t } } else { response = { status : 200, data : null } console.log('Tools find: null'); } res.send(response); }); }); // Email Értesítő var transporter = nodemailer.createTransport({ service: 'mail.klelectro.hu', port: 465, secret: true, auth: { user: 'munkanyilvantarto@klelectro.hu', pass: 'IoSn1Pb1' } }); function makeHtmlPage(invoices, callback) { var i=0; var htmlTableName="Befizetésre váró számlák"; //var htmlTableRows=""; var htmlPage=""; var htmlHead=" \n\ \n\ \n\ Számla értesítő \n\ \n\ \n"; var htmlTableK="
\n\

Lejárat közeli kintlevőség

\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n"; var htmlTableB="
\n\

Befizetésre váró számlák

\n\
\ #no \ \ Kibocsátó\ \ Kelt\ \ Esedékes\ \ Határidő\ \ Státusz\ \ Érték\
\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n"; var dt = new Date(); invoices.forEach(invoice => { var newRow = ""; var hatarido=""; var statusz=""; var expDate='\n"; var price=0; if (invoice.state===3) { var a=moment(invoice.dateEmission,"YYYY.MM.DD"); var b=moment(invoice.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); // console.log('Napok:'+days+'+'+invoice.delayed); invoice.daysLeft=days+invoice.delayed; if (days<10) { if (invoice.delayed>0) { hatarido='\n' } else { hatarido='\n' } // var inputValue = parseInt(price.replace(/\D/g, ''),10); if (invoice.currency==='HUF') { price=(invoice.nPrice/100).toLocaleString('hu-HU')+' HUF '; } if (invoice.currency==='EUR') { price=(invoice.nPrice/100).toLocaleString('de-DE')+' EUR '; } if (invoice.currency==='USD') { price=(invoice.nPrice/100).toLocaleString('us-US')+' USD '; } // Bejövő if(invoice.itype===false) { statusz='\n'; } // Kimenő if(invoice.itype===true) { statusz='\n'; } newRow='\n\n'+ '\n'+ '\n'+ //'\n'; // Bejövő if(invoice.itype===false){ htmlTableB+= newRow+'\n'; } // Kimenő if(invoice.itype===true){ htmlTableK+= newRow+'\n'; } i++; } } }) htmlPage=htmlHead+htmlTableB+"\n
\ #no\ \ Kibocsátó\ \ Kelt\ \ Esedékes\ \ Határidő\ \ Státusz\ \ Érték\
'+invoice.expiryDate+"
'+invoice.daysLeft+' +'+invoice.delayed+' '+invoice.daysLeft+' Fizetetlen Kintlevőség
'+(i+1)+''+invoice.owner+''+invoice.dateEmission+''+invoice.expiryDate+ expDate+ //''+''+invoice.daysLeft+' '+ hatarido+ //''+invoice.state+ statusz+ ''+price+'
\n
\n"+htmlTableK+"\n\n\n\n\n"; //console.log(htmlPage); callback(i,htmlPage); } function prepareEmailMsg(invoices, callback) { var dt = new Date(); var txtBejovoH=""; var txtBejovo=""; var txtKimenoH=""; var txtKimeno=""; var fullMessage=""; invoices.forEach(element => { var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); console.log('Napok:'+days+'+'+element.delayed); element.daysLeft=days+element.delayed; if (days<10) { if (element.delayed) { if (element.itype===false) // Bejövő halasztott { txtBejovoH+=element.daysLeft+" nap "+element.owner+" Számlaszám: "+element.invoiceNumber+" Összeg: "+element.nPrice+"\n"; } else // Kimenő Halasztott { txtKimenoH+=element.daysLeft+" nap "+element.owner+" Számlaszám: "+element.invoiceNumber+" Összeg: "+element.nPrice+"\n"; } } else { if (element.itype===false) // Bejövő { txtBejovo+=element.daysLeft+" nap "+element.owner+" Számlaszám: "+element.invoiceNumber+" Összeg: "+element.nPrice+"\n"; } else // Kimenő { txtKimeno+=element.daysLeft+" nap "+element.owner+" Számlaszám: "+element.invoiceNumber+" Összeg: "+element.nPrice+"\n"; } } } }); fullMessage="Halasztott bejövő számlák közeli fizetési határidő: \n"+txtBejovoH+ "Halasztott kimenő számlák közeli fizetési határidő: \n"+txtKimenoH+ "Bejövő számlák fizetési határidő: \n"+txtBejovo+ "Kimenő számlák fizetési határidő: \n"+txtBejovo; callback(fullMessage); } function sendEmailNotify(invoices) { var mailOptions = { from: 'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: '', subject: 'Lejáratközeli számlák listája', html: 'That was easy!' }; User.find({'notifyInvoices':true,'isBanned':false}, function(err,user){ if (err) { console.log(err); }else { user.forEach(element => { if (element.notifyInvoices===true && element.isBanned===false) { mailOptions.to+=element.email+','; } }); //prepareEmailMsg(invoices,function(msg){ makeHtmlPage(invoices,function(count,msg){ if (count>0) { mailOptions.html=msg; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } }) } }); } // Számla lista generálás function getInvoices(mode,filter,callback) { var date = new Date(); var query={}; if (mode==='all') { var title="Összes számla" query={}; if (filter!="noFilter") { query={'itype': false,'owner': {"$regex":filter,"$options":'i'}}; } } if (mode==='in') { var title="Bejövő számlák" query={'itype': false}; if (filter!="noFilter") { query={'itype': false,'owner': {"$regex":filter,"$options":'i'}}; } /*Invoice.find({'itype': false},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Bejövő számlák" callback(null,invoices,title); } });*/ } if (mode==='in-unpaid') { var title="Fizetetlen bejövő számlák" query={'itype': false,'state':'3'}; if (filter!="noFilter") { query={'itype': false,'state':'3','owner': {"$regex":filter,"$options":'i'}}; } /* Invoice.find({'itype': false,'state':'3'},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Fizetetlen bejövő számlák" callback(null,invoices,title); } });*/ } if (mode==='in-paid') { var title="Fizetett bejövő számlák" query={'itype': false,'state':'0'}; if (filter!="noFilter") { query={'itype': false,'state':'0','owner': {"$regex":filter,"$options":'i'}}; } /*Invoice.find({'itype': false,'state':'0'},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Fizetett bejövő számlák" callback(null,invoices,title); } });*/ } // Ehavi esedékes if (mode==='in-month-pay') { var title="Tárgyhavi esedékes bejövő számlák" var lastDay = moment().endOf('month').format("YYYY.MM.DD"); query={$and:[{'itype': false,'state':'3','expiryDate': {$lte : lastDay}}]}; if (filter!="noFilter") { query={$and:[{'itype': false,'state':'3','expiryDate': {$lte : lastDay},'owner': {"$regex":filter,"$options":'i'}}]}; } /*Invoice.find({$and:[{'itype': false,'state':'3','expiryDate': {$lte : lastDay}}]},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Tárgyhavi esedékes bejövő számlák" callback(null,invoices,title); } });*/ } // Következő havi esedékes if (mode==='in-nextmonth-pay') { var title="Kövtkező havi esedékes bejövő számlák" var lastDayThisMonth = moment().endOf('month').format("YYYY.MM.DD"); var lastDayNextMonth = moment().add(1,'M').endOf('month').format("YYYY.MM.DD"); query={$and:[{'itype': false,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth}}]}; if (filter!="noFilter") { query={$and:[{'itype': false,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth},'owner': {"$regex":filter,"$options":'i'}}]}; } /*Invoice.find({$and:[{'itype': false,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth}}]},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Kövtkező havi esedékes bejövő számlák" callback(null,invoices,title); } });*/ } // Kimenő számlák if (mode==='out') { var title="Kimenő számlák" query={'itype': true}; if (filter!="noFilter") { query={'itype': true,'owner': {"$regex":filter,"$options":'i'}}; } /*Invoice.find({'itype': true},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Kimenő számlák" callback(null,invoices,title); } });*/ } // Fizetett if (mode==='out-paid') { var title="Fizetett kimenő számlák" query={'itype': true,'state':'0'}; if (filter!="noFilter") { query={'itype': true,'state':'0','owner': {"$regex":filter,"$options":'i'}}; } /* Invoice.find({'itype': true,'state':'0'},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Fizetett kimenő számlák" callback(null,invoices,title); } });*/ } // Fizetetlen if (mode==='out-unpaid') { var title="Fizetetlen kimenő számlák" query={'itype': true,'state':'3'}; if (filter!="noFilter") { query={'itype': true,'state':'3','owner': {"$regex":filter,"$options":'i'}}; } /* Invoice.find({'itype': true,'state':'3'},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Fizetetlen kimenő számlák" callback(null,invoices,title); } });*/ } // Ehavi esedékes if (mode==='out-month-pay') { var title="Tárgyhavi esedékes kimenő számlák" var lastDay = moment().endOf('month').format("YYYY.MM.DD"); query={$and:[{'itype': true,'state':'3','expiryDate': {$lte : lastDay}}]}; if (filter!="noFilter") { query={$and:[{'itype': true,'state':'3','expiryDate': {$lte : lastDay},'owner': {"$regex":filter,"$options":'i'}}]}; } /* var lastDay = moment().endOf('month').format("YYYY.MM.DD"); Invoice.find({$and:[{'itype': true,'state':'3','expiryDate': {$lte : lastDay}}]},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Tárgyhavi esedékes kimenő számlák" callback(null,invoices,title); } });*/ } // Következő havi esedékes if (mode==='out-nextmonth-pay') { var title="Kövtkező havi esedékes bejövő számlák" var lastDayThisMonth = moment().endOf('month').format("YYYY.MM.DD"); var lastDayNextMonth = moment().add(1,'M').endOf('month').format("YYYY.MM.DD"); query={$and:[{'itype': true,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth}}]}; if (filter!="noFilter") { query={$and:[{'itype': true,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth},'owner': {"$regex":filter,"$options":'i'}}]}; } /* var lastDayThisMonth = moment().endOf('month').format("YYYY.MM.DD"); var lastDayNextMonth = moment().add(1,'M').endOf('month').format("YYYY.MM.DD"); Invoice.find({$and:[{'itype': true,'state':'3','expiryDate': {$gte : lastDayThisMonth, $lte : lastDayNextMonth}}]},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { var title="Kövtkező havi esedékes kimenő számlák" callback(null,invoices,title); } });*/ } Invoice.find(query,null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { callback(err); } else { callback(null,invoices,title); } }); } // Kimutatás kalkuláció router.get('/list/statement', function(req, res) { Invoice.find({},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { console.log('Kimutatás generáláshiba. '+err); } else { var d = new Date(); var kintlevoseg={'HUF':0,'EUR':0,'USD':0}; var haviBevetel={'HUF':0,'EUR':0,'USD':0}; var tartozas={'HUF':0,'EUR':0,'USD':0}; invoices.forEach(invoice => { //Csak a bejövő számlát nézzük if (invoice.itype===false) { // Fizetetlen if(invoice.state===3) { if (invoice.currency==='HUF') { tartozas.HUF+=(invoice.nPrice); } if (invoice.currency==='EUR') { tartozas.EUR+=(invoice.nPrice); } if (invoice.currency==='USD') { tartozas.USD+=(invoice.nPrice); } } } //Csak kimenő számlát nézzük if (invoice.itype===true) { // Fizetetlen if(invoice.state===3) { if (invoice.currency==='HUF') { kintlevoseg.HUF+=(invoice.nPrice); } if (invoice.currency==='EUR') { kintlevoseg.EUR+=(invoice.nPrice); } if (invoice.currency==='USD') { kintlevoseg.USD+=(invoice.nPrice); } } // Fizetett if (invoice.state===0) { var monthNow = (d.getMonth()+1).toString(); var invoiceMonth = moment(invoice.closingDate, 'YYYY/MM/DD').format('M'); if (monthNow===invoiceMonth) { if (invoice.currency==='HUF') { haviBevetel.HUF+=(invoice.nPrice); } if (invoice.currency==='EUR') { haviBevetel.EUR+=(invoice.nPrice); } if (invoice.currency==='USD') { haviBevetel.USD+=(invoice.nPrice); } } } } }); var iboard={ 'kintlevoseg':kintlevoseg, 'tartozas':tartozas, 'haviBevetel':haviBevetel } res.send(iboard); } }); }); // Számlák lekérdezése AJAX Route router.get('/list/:mode', utils.ensureAuthenticated, function(req, res) { var dt = new Date(); getInvoices(req.params.mode,"noFilter",function(err,invoices, pageTitle){ if (err) { console.log(err); } else { invoices.forEach(element => { var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); // console.log(days); element.daysLeft=days; }); //res.send(invoices); res.render('invoices', { //title: req.body.newTitle, invoices: invoices, mode: req.params.mode, tsep: tsep, title: pageTitle }); } }); }); // Számlák szűrése AJAX Route router.get('/find/:mode/:filter', utils.ensureAuthenticated, function(req, res) { var dt = new Date(); getInvoices(req.params.mode,req.params.filter,function(err,invoices, pageTitle){ if (err) { console.log(err); } else { invoices.forEach(element => { var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); // console.log(days); element.daysLeft=days; }); res.send(invoices); } }); }); // Számladuplikátumok ellenőrzése AJAX Route router.get('/checkinvoicenumber/:id', utils.ensureAuthenticated, function(req, res) { Invoice.find({'invoiceNumber':req.params.id},function(err, invoices){ if (err) { console.log(err); } else { if (invoices.length>0) res.send(200,"reserved"); else res.send(200,"free"); } }); }); /* // Számlák template Route router.get('/invoicestemplate', utils.ensureAuthenticated, function(req, res) { res.render('invoicestemplate', { title: 'Számlák', }); }); // Új számla template Route router.get('/invoicenewtemplate/:itype', utils.ensureAuthenticated, function(req, res) { res.render('invoiceNewtemplate', { title: 'Új számla', itype: req.params.itype }); });*/ // Számlák lekérdezése Route router.get('/list', utils.ensureAuthenticated, function(req, res) { if (req.user.isAdmin===false) { if(req.user.canAccess.invoices===false) { req.flash('error','Nincs Jogosúltsága a funkció eléréséhez!'); res.redirect('/users/login'); } } var dt = new Date(); var title='Összes Számla'; if (req.params.mode==='in') { title='Bejövő számlák'; } if (req.params.mode==='out') { title='Kimenő számlák'; } getInvoices('all',"noFilter",function(err,invoices){ if (err) { console.log(err); } else { invoices.forEach(element => { var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); //console.log(days); element.daysLeft=days+element.delayed; if (req.user.name==='Vincze József') element.nPrice=0; }); res.render('invoices', { title: 'Összes számla', mode: 'all', tsep: tsep, invoices: invoices, user:req.user }); } }); }); function printPage(invoices,title,callback) { var dt = new Date(); var item=[]; var i=1; item.push(['#', 'Kibocsátó', 'Kelt', 'Esedékes', 'Határidő','Státusz','Érték']); invoices.forEach(element => { var statusz=""; var expDate=""; var hatarido=0; var price=""; var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); element.daysLeft=days+element.delayed; element.state="Picsa"; // Beautify data if (element.state===0) element.daysLeft=0; // Ha kifizetett, akkor a hátralévő napok száma már 0 if (element.delayed>0) { hatarido=element.daysLeft+element.delayed; } // Bejövő if(element.itype===false) { if (element.state===3) { if (element.delayed>0) { // Halasztott statusz="Halasztva +"+element.delayed+" nap"; expDate+=moment(element.expiryDate, "YYYY.MM.DD").add(element.delayed, 'days').format("YYYY.MM.DD"); }else { // Fizetetlen expDate+=moment(element.expiryDate, "YYYY.MM.DD").format("YYYY.MM.DD"); statusz="Fizetetlen"; } } } // Kimenő if(element.itype===true) { if (element.state===3) { if (element.delayed>0) { // Halasztott element.daysLeft=40; statusz="Halasztva +"+element.delayed+" nap"; expDate+=moment(element.expiryDate, "YYYY.MM.DD").add(element.delayed, 'days').format("YYYY.MM.DD"); }else { // Fizetetlen expDate+=moment(element.expiryDate, "YYYY.MM.DD").format("YYYY.MM.DD"); statusz="Kintlevőség"; } } } if (element.state===0) { statusz="Kiegyenlítve"; } // Érték sor if (element.currency==='HUF') price=tsep(element.nPrice)+' HUF' if (element.currency==='EUR') price=tsep(element.nPrice)+' EUR' if (element.currency==='USD') price=tsep(element.nPrice)+' USD' //price=Intl.NumberFormat('hu-HU', { style: 'currency', currency: 'HUF' }).format(element.nPrice); //toLocaleString('hu-HU', { style: 'currency', currency: 'HUF' }); item.push([{text:i, style:'tableData', alignment: 'right'}, {text:element.owner, style:'tableData'}, {text:element.dateEmission, style:'tableData', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, {text:expDate, style:'tableData', alignment: 'right'}, {text:element.daysLeft, style:'tableData'}, //{text:element.state, italics: true, color: 'gray'}, {text:statusz, style:'tableData'}, {text:price, style:'tableData', alignment: 'right'}]); i++; }); // playground requires you to assign document definition to a variable called dd var dd = { pageOrientation: 'landscape', footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}}, header: function(currentPage, pageCount) { // you can apply any logic and return any valid pdfmake element return { text: 'Nyomtatva: '+Date(), alignment: (currentPage % 2) ? 'left' : 'right' }; }, content: [ {text: title, style: 'header'}, { style: 'tableExample', table: { //widths: [20, 'auto', 80, 80,'*','*','*'], widths: [20, '*', 70, 70,50,'auto','auto'], body: [], }, }, ], styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, subheader: { fontSize: 16, bold: true, fillColor: '#eeeeee', margin: [0, 10, 0, 5] }, tableExample: { margin: [0, 5, 0, 15] }, tableHeader: { bold: true, fontSize: 10, fillColor: '#eeeeee', color: 'red' }, tableData: { bold: false, fontSize: 10, italics: true, color: 'gray' } }, defaultStyle: { // alignment: 'justify' } } dd.content[1].table.body=item; //pdf.createPdf(dd).open(); callback(null,dd); // ... } // Menü javascript kiszolgálás router.get('/print2/:url', function(req,res){ getInvoices(req.params.url ,"", function(err,invoices,title) { //console.log(invoices); if(err) { console.log(err); } else { printPage(invoices,title, function(err,data){ // Client side pdf res.send(data); }); } }); }); // Nyomtatás router.get('/print', utils.ensureAuthenticated, function(req, res) { var dt = new Date(); var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var PdfPrinter = require('pdfmake/src/printer'); var printer = new PdfPrinter(fonts); Invoice.find({},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { console.log(err); } else { var data=printPage(invoices, function(err,data){ // Client side pdf pdfMake.createPdf(data).open(); // Server side pdf /*var pdfDoc = printer.createPdfKitDocument(data); pdfDoc.pipe(fs.createWriteStream(__dirname+'/../docs/tables.pdf')); pdfDoc.end(); res.download(path.normalize(__dirname+'/../docs/tables.pdf'),'számlalista_összes.pdf'); */ }); /* invoices.forEach(element => { var a=moment(element.dateEmission,"YYYY.MM.DD"); var b=moment(element.expiryDate,"YYYY.MM.DD"); var days=b.diff(dt,'days'); console.log(days); element.daysLeft=days; });*/ // lastId=articles.workNumber; /* res.render('invoices', { title: 'Számlák', invoices: invoices, //rot:admin // articles: workSign });*/ } }); }); // Edit invoice Route router.get('/edit/:id', utils.ensureAuthenticated,function (req,res) { var dt = new Date(); var title=''; Invoice.findById(req.params.id,function(err,invoice){ if (err) { console.log(err); } else { if (invoice.itype===false) title='Bejövő számla módosítás'; if (invoice.itype===true) title='Kimenő számla módosítás'; var a=moment(invoice.dateEmission,"YYYY.MM.DD"); var b=moment(invoice.expiryDate,"YYYY.MM.DD"); var days=b.diff(a,'days'); invoice.daysLeft=days; res.render('invoiceEdit', { title: title, invoice: invoice }); } }) }); // Edit invoice POST Route router.post('/edit/:id', utils.ensureAuthenticated,function(req,res){ var dt = new Date(); if (req.body.action==='delaying') { req.checkBody('invoiceDelayed','Haladék napok száma nem megfelelő !').notEmpty(); } // Get errors let errors = req.validationErrors(); if(errors) { var title=''; Invoice.findById(req.params.id,function(err,invoice){ if (err) { console.log(err); } else { if (invoice.itype===false) title='Bejövő számla módosítás'; if (invoice.itype===true) title='Kimenő számla módosítás'; var a=moment(invoice.dateEmission,"YYYY.MM.DD"); var b=moment(invoice.expiryDate,"YYYY.MM.DD"); var days=b.diff(a,'days'); invoice.daysLeft=days; res.render('invoiceEdit', { title: title, invoice: invoice, errors:errors }); } }) } else { let query = {_id:req.params.id} let invoice = {}; var flashMsg; invoice.body = req.body.body; // Haladék adása if (req.body.action==='delaying') { invoice.delayed=req.body.invoiceDelayed; flashMsg="Fizetési határidő eltolva "+invoice.delayed+"nappal."; } if (req.body.action==='update') { //invoice.owner=req.body.owner //invoice.author=req.user._id; invoice.body = req.body.body; invoice.invoiceNumber=req.body.invoiceNumber; invoice.expiryDate=req.body.expiryDate; invoice.dateEmission=req.body.dateEmission; //invoice.creationDate=dt; //invoice.delayed=0; invoice.currency=req.body.currencyl; //invoice.closingDate=null; //invoice.state=3; // Fizetésre vár invoice.nPrice=Number(req.body.nPrice.replace(/,/g, '.').replace(/\s/g, '')); } Invoice.update(query, invoice, function(err){ if(err){ console.log(err); }else{ //logging.logAppend("Berendezés módosítva.",req.user,article.id,Article.db.name,'ARTICLEEDIT'); req.flash('success',flashMsg); res.redirect('/invoices/details/'+req.params.id); } }); } }); // Details invoice Route router.get('/details/:id', utils.ensureAuthenticated,function (req,res) { var dt = new Date(); var title=''; Invoice.findById(req.params.id,function(err,invoice){ if (err) { console.log(err); } else { if (invoice.itype===false) title='Bejövő számla információ'; if (invoice.itype===true) title='Kimenő számla információ'; var a=moment(invoice.dateEmission,"YYYY.MM.DD"); var b=moment(invoice.expiryDate,"YYYY.MM.DD"); var days=b.diff(a,'days'); invoice.daysLeft=days; res.render('invoiceDetails', { title: title, invoice: invoice, tsep: tsep }); } }) }); // Add new invoice POST Route router.post('/details/:id', utils.ensureAuthenticated,function(req,res){ var dt = new Date(); if (req.body.action==='delaying') { req.checkBody('invoiceDelayed','Haladék napok száma nem megfelelő !').notEmpty(); } if (req.body.action==='closing') { req.checkBody('transactionid','Tranzakció azanosító megadása kötelező!').notEmpty(); req.checkBody('compDate','Tranzakció azanosító megadása kötelező!').notEmpty(); } // Get errors let errors = req.validationErrors(); if(errors) { var title=''; Invoice.findById(req.params.id,function(err,invoice){ if (err) { console.log(err); } else { if (invoice.itype===false) title='Bejövő számla információ'; if (invoice.itype===true) title='Kimenő számla információ'; var a=moment(invoice.dateEmission,"YYYY.MM.DD"); var b=moment(invoice.expiryDate,"YYYY.MM.DD"); var days=b.diff(a,'days'); invoice.daysLeft=days; res.render('invoiceDetails', { title: title, invoice: invoice, tsep: tsep, errors:errors }); } }) } else { let query = {_id:req.params.id} let invoice = {}; var flashMsg; invoice.body = req.body.body; // Haladék adása if (req.body.action==='delaying') { invoice.delayed=req.body.invoiceDelayed; flashMsg="Fizetési határidő eltolva "+invoice.delayed+"nappal."; } else if (req.body.action==='closing') { invoice.state=0; invoice.transactionId=req.body.transactionid; invoice.closingDate=req.body.compDate; flashMsg="Számla sikeresen lezárva a "+req.body.transactionid+" azonosítóval."; } Invoice.update(query, invoice, function(err){ if(err){ console.log(err); }else{ //logging.logAppend("Berendezés módosítva.",req.user,article.id,Article.db.name,'ARTICLEEDIT'); req.flash('success',flashMsg); res.redirect('/invoices/list'); } }); } }); // Add new invoice Route router.get('/new/:itype', utils.ensureAuthenticated,function (req,res) { var dt = new Date(); var devId; var wnY=dt.getFullYear(); var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, ''); var title=''; if (req.params.itype==='0') title='Új bejövő számla felvétele'; if (req.params.itype==='1') title='Új kimenő számla felvétele'; res.render('invoiceNew', { title: title, itype: req.params.itype }); }); // Add new invoice POST Route router.post('/new/:itype', utils.ensureAuthenticated,function(req,res){ req.checkBody('owner','Kibocsátó megadása kötelező!').notEmpty(); req.checkBody('invoiceNumber','Számlaszám megadása kötelező!').notEmpty(); req.checkBody('currencyl','Helytelen valuta beállítás!').notEmpty(); var dt = new Date(); // Get errors let errors = req.validationErrors(); if(errors) { var devId; var wnY=dt.getFullYear(); var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, ''); var title=''; if (req.params.itype==='0') title='Új bejövő számla felvétele'; if (req.params.itype==='1') title='Új kimenő számla felvétele'; res.render('invoiceNew', { title: title, itype: req.params.itype, errors:errors, user:req.user }); } else { let invoice=new Invoice(); invoice.owner=req.body.owner invoice.author=req.user._id; invoice.body = req.body.body; invoice.invoiceNumber=req.body.invoiceNumber; invoice.expiryDate=req.body.expiryDate; invoice.dateEmission=req.body.dateEmission; invoice.creationDate=dt; invoice.delayed=0; invoice.currency=req.body.currencyl; invoice.closingDate=null; invoice.state=3; // Fizetésre vár if (req.params.itype==='0') { invoice.itype=false; } if (req.params.itype==='1') { invoice.itype=true; } invoice.nPrice=Number(req.body.nPrice.replace(/[^0-9\.]/g, ''),10); invoice.save(function(err){ if (err) { console.log(err); } else { req.flash('success','Számla sikeresen felvéve.'); if (req.body.action==='save') { res.redirect('/invoices/list'); } if (req.body.action==='saveAndNew') { res.redirect('/invoices/new/'+req.params.itype); } } }) } }); // Számla törlése router.delete('/:id', function(req, res){ var ObjectId = require('mongoose').Types.ObjectId; let query = {_id:req.params.id} Invoice.remove(query, function(err){ // Töröljük a számlát if(err){ console.log(err); } req.flash('success','Számla sikeresen törölve.'); res.send('Success'); }); }); module.exports = router;