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\
| \
#no \
| \n\
\
Kibocsátó\
| \n\
\
Kelt\
| \n\
\
Esedékes\
| \n\
\
Határidő\
| \n\
\
Státusz\
| \n\
\
Érték\
| \n\
\n\
\n\
\n";
var htmlTableB="\n\
Befizetésre váró számlák
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
| \
#no\
| \n\
\
Kibocsátó\
| \n\
\
Kelt\
| \n\
\
Esedékes\
| \n\
\
Határidő\
| \n\
\
Státusz\
| \n\
\
Érték\
| \n\
\n\
\n\
\n";
var dt = new Date();
invoices.forEach(invoice => {
var newRow = "";
var hatarido="";
var statusz="";
var expDate=''+invoice.expiryDate+"
| \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=''+invoice.daysLeft+' +'+invoice.delayed+' | \n'
}
else
{
hatarido=''+invoice.daysLeft+' | \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=' Fizetetlen | \n';
}
// Kimenő
if(invoice.itype===true)
{
statusz=' Kintlevőség | \n';
}
newRow='\n| '+(i+1)+' | \n'+
''+invoice.owner+' | \n'+
''+invoice.dateEmission+' | \n'+
//''+invoice.expiryDate+
expDate+
//' | '+''+invoice.daysLeft+' '+
hatarido+
//' | '+invoice.state+
statusz+
' | '+price+' | \n';
// Bejövő
if(invoice.itype===false){
htmlTableB+= newRow+'
\n';
}
// Kimenő
if(invoice.itype===true){
htmlTableK+= newRow+'\n';
}
i++;
}
}
})
htmlPage=htmlHead+htmlTableB+"\n
\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;