1368 lines
42 KiB
JavaScript
1368 lines
42 KiB
JavaScript
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="<!DOCTYPE html> \n\
|
|
<html lang='hu'> \n\
|
|
<head>\n\
|
|
<title> Számla értesítő </title>\n\
|
|
</head>\n\
|
|
<body>\n";
|
|
var htmlTableK="<div class=container id='darktable' style='text-align: left;overflow: hidden;width: 80%;margin: 0 auto;display: block;padding: 0 0 0 0;float: left;'> \n\
|
|
<h1> Lejárat közeli kintlevőség </h1>\n\
|
|
<table style='width:100%'>\n\
|
|
<col style='width:5%'>\n\
|
|
<col style='width:auto'>\n\
|
|
<col style='width:10%'>\n\
|
|
<col style='width:10%'>\n\
|
|
<col style='width:8%'>\n\
|
|
<col style='width:8%'>\n\
|
|
<col style='width:15%'>\n\
|
|
<thead>\n\
|
|
<tr>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
#no \
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'> \
|
|
Kibocsátó\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Kelt\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Esedékes\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Határidő\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Státusz\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Érték\
|
|
</th>\n\
|
|
</tr>\n\
|
|
</thead>\n\
|
|
<tbody>\n";
|
|
var htmlTableB="<div class=container id='darktable2' style='text-align: left;overflow: hidden;width: 80%;margin: 0 auto;display: block;padding: 0 0 0 0;float: left;'>\n\
|
|
<h1> Befizetésre váró számlák </h1>\n\
|
|
<table style='width:100%'>\n\
|
|
<col style='width:5%'>\n\
|
|
<col style='width:auto'>\n\
|
|
<col style='width:10%'>\n\
|
|
<col style='width:10%'>\n\
|
|
<col style='width:8%'>\n\
|
|
<col style='width:8%'>\n\
|
|
<col style='width:15%'>\n\
|
|
<thead>\n\
|
|
<tr>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'> \
|
|
#no\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'> \
|
|
Kibocsátó\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Kelt\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Esedékes\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Határidő\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Státusz\
|
|
</th>\n\
|
|
<th style='padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;background-color: #BBCCDD;font-weight: bold;font-size: 1em;text-align: left;color: #185875;'>\
|
|
Érték\
|
|
</th>\n\
|
|
</tr>\n\
|
|
</thead>\n\
|
|
<tbody>\n";
|
|
var dt = new Date();
|
|
invoices.forEach(invoice => {
|
|
|
|
var newRow = "";
|
|
var hatarido="";
|
|
var statusz="";
|
|
var expDate='<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+invoice.expiryDate+"<br></td>\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='<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+invoice.daysLeft+' +'+invoice.delayed+' </td>\n'
|
|
}
|
|
else
|
|
{
|
|
hatarido='<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+invoice.daysLeft+' </td>\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='<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;"> Fizetetlen </td>\n';
|
|
}
|
|
// Kimenő
|
|
if(invoice.itype===true)
|
|
{
|
|
statusz='<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;"> Kintlevőség </td>\n';
|
|
}
|
|
newRow='<tr style="background-color: #323C50;">\n<td style="font-weight: normal;font-size: 1em;color: #d19b3d;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+(i+1)+'</td>\n'+
|
|
'<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+invoice.owner+'</td>\n'+
|
|
'<td style="font-weight: normal;font-size: 1em;color: #F4F4Fa;-webkit-box-shadow: 2px 2px 2px -2px #0E1119;-moz-box-shadow: 2px 2px 2px -2px #0E1119;box-shadow: 2px 2px 2px -2px #0E1119;padding-bottom: 1%;padding-top: 1%;padding-left: 2%;padding-right: 2%;">'+invoice.dateEmission+'</td>\n'+
|
|
//'</td><td style="text-align:center">'+invoice.expiryDate+
|
|
expDate+
|
|
//'</td><td style="text-align:center">'+'<span class="badge badge-pill badge-primary">'+invoice.daysLeft+' </span>'+
|
|
hatarido+
|
|
//'</td><td style="text-align:center">'+invoice.state+
|
|
statusz+
|
|
'<td style="text-align:right;color: #F4F4Fa;">'+price+'</td>\n';
|
|
// Bejövő
|
|
if(invoice.itype===false){
|
|
htmlTableB+= newRow+'</tr>\n';
|
|
}
|
|
// Kimenő
|
|
if(invoice.itype===true){
|
|
htmlTableK+= newRow+'</tr>\n';
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
})
|
|
htmlPage=htmlHead+htmlTableB+"</tbody>\n</table>\n</div>\n"+htmlTableK+"</tbody>\n</table>\n</div>\n</body>\n</html>\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; |