klnodekb/routes/components_base.js

425 lines
13 KiB
JavaScript

const express = require('express');
const router = express.Router();
let Article = require('../models/article');
let Work=require('../models/works');
let itemGroup=require('../models/itemgroup');
// User Model
let User = require('../models/user');
var utils = require('../js/utils');
let ComponentBase= require('../models/componentbase');
var logging=require('../js/helpers');
let Client = require('../models/client');
var formidable = require('formidable');
var csv = require("fast-csv");
var fs = require('fs');
// GetClients Midleware
// Beteszi a req.clients térbe a klienslistát
function getClients(req, res, next) {
// Process the data received in req.body
// instead of res.redirect('/');
Client.find({} ,function(err, clients){
if (err)
{
console.log(err);
}
else {
req.clients = clients;
return next();
}
});
}
// Cikkcsoport lekérés middleware
function getItemGroups(req, res, next) {
// Process the data received in req.body
// instead of res.redirect('/');
itemGroup.find({} ,function(err, igroups){
if (err)
{
console.log(err);
}
else {
req.itemGroups = igroups;
return next();
}
});
}
var tsep5 = function (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(".");
};
// Ajax keresés
// Add ItemGroups AJAX
router.post('/addItemGroup', 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'
}
var itemGrp=new itemGroup();
itemGrp.name=req.body.content;
itemGroup.find({'name': { $regex: "^"+req.body.content+"$", $options: '-i' }},function(err, components){
if (err)
{
console.log('DB ERR find item group.');
response = {
status : 200,
data : null
}
res.send(response);
}
else
{
if (components.length>0)
{
console.log('Már van ilyen cikkcsoport!');
response = {
status : 200,
data : null
}
res.send(response);
}
else
{
console.log('content: '+itemGrp.name);
itemGrp.save(function(err){
if(err){
console.log(err);
response = {
status : 200,
data : null
}
res.send(response);
}else{
console.log('Cikk csoport sikeresen hozzáadva');
response = {
status : 200,
data : {'id':itemGrp._id,'name':itemGrp.name}
}
res.send(response);
}
});
}
}
})
});
// Find Components on keypress AJAX
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'
}
ComponentBase.find({$or: [{'ean1': new RegExp(req.body.content, 'i')},{'itemNumber': new RegExp(req.body.content, 'i')},{'parameters': new RegExp(req.body.content, 'i')},{'name': new RegExp(req.body.content, 'i')}]}).limit(200).exec(function(err, components){
if (err)
{
console.log(err);
return;
}
if(components) {
response = {
status : 200,
data : components
}
}
else
{
response = {
status : 200,
data : null
}
console.log('Tools find: null');
}
res.send(response);
});
});
// Cikk keresése
// Find ItemsBy Number on keypress
router.post('/findByEan', utils.ensureAuthenticated,function (req,res) {
//console.log(req.body.content);
var fb=req.body.findBy;
console.log(fb+req.body.content);
if (fb==='ean1')
{
var q = ComponentBase.findOne({'ean1' : req.body.content});//.limit(20);
}
if (fb==='itemNumber')
var q = ComponentBase.findOne({'itemNumber': req.body.content});//.limit(20);
q.exec(function(err,t){
if (err)
{
console.log(err);
return;
}
if (t)
{
response = {
status : 200,
result : 'OK',
data : t
}
}
else
{
response = {
status : 200,
result : 'Not Found',
data : null
}
//console.log('Tools find: null');
}
res.send(response);
});
});
router.get('/uploadnew', utils.ensureAuthenticated,function(req,res){
res.render('components_base_upload', {
title: 'Árlista feltöltés',
rot: req.user.isAdmin,
});
});
router.post('/uploadnew', function (req, res){
var form = new formidable.IncomingForm();
form.parse(req);
form.on('file', function (name, file)
{
console.log('Uploaded ' +file.path);
var stream = fs.createReadStream(file.path);
var items=[];
console.log('Kiválasztott fájl: '+file.name);
csv
.fromStream(stream, {delimiter:';',headers : ["parameters","itemNumber","name","ean","price"]})
.on("data", function(data){
var item= new ComponentBase();
item.manufacturer='ABB';
item.itemNumber=data.itemNumber;
item.name=data.name;
item.ean1=data.ean;
item.price=data.price;
item.parameters=data.parameters;
item.itemUnit='db';
item.itemGroup='KIF';
item.valuta='HUF';
item.stock=0;
item.minimumStock=10;
item.supplierId='5c3e1a59bef5ae0a203482e6';
items.push(item);
// console.log(data);
})
.on("end", function(){
console.log("Start import...");
console.log("Remove old entries of ");
ComponentBase.deleteMany({},function(err, result){
if (err)
{
req.flash('error','Hiba a feltöltés során');
console.log("Removing error!");
res.redirect('/components_base/uploadnew');
}
else
{
console.log("Removing Ok.");
console.log("Start importing...");
console.log("Sikeres import!");
req.flash('success','Árlista sikeresen hozzáadva');
var response = {
status : 200,
data : null
}
res.send(response);
//res.redirect('/components_base/uploadnew');
ComponentBase.insertMany(items,function(err){
if(err){
console.log(err);
return;
}
});
console.log("done");
}
});
});
});
});
// Komponens lista
router.get('/list', utils.ensureAuthenticated,function(req, res) {
//ComponentBase.find({}).populate('deviceID').populate('workID').exec(function(err, components){
ComponentBase.find({}).limit(200).exec(function(err, components){
if (err)
{
console.log(err);
}
else {
res.render('components_base_list', {
//res.render('table', {
title: 'Komponens lista',
tsep5:tsep5,
componentsList:components
});
}
});
});
// Komponens lista
router.get('/data-source', utils.ensureAuthenticated,function(req, res) {
ComponentBase.find({},function(err, components){
if (err)
{
console.log(err);
}
else {
var response = {
status : 200,
data : components
}
//res.render('components_base_list', {
res.send(response);
}
});
});
// Komponens hozzáadása az adatbázishoz
router.get('/new', utils.ensureAuthenticated,getClients,getItemGroups, function (req,res) {
res.render('compbase_add', {
title: 'Új komponens felvétele az adatbázisba',
igroups: req.itemGroups,
clients: req.clients,
deviceID: req.params.aid,
workID: req.params.wid,
rot: req.user.isAdmin,
});
});
// Komponens hozzáadása az adatbázishoz
router.post('/new',utils.ensureAuthenticated,getClients,getItemGroups, function(req,res){
req.checkBody('compName','Komponens megnevezése kötelező!').notEmpty();
req.checkBody('compParams','Paraméterek megadása kötelező!').notEmpty();
req.checkBody('ean1','EAN kód kötelező!').notEmpty();
req.checkBody('supplierId','Beszállító nem lehet üres!').notEmpty();
req.checkBody('itemGroupName','Cikkcsoport nem lehet üres!').notEmpty();
// Get errors
let errors = req.validationErrors();
if(errors)
{
var component={name:'',parameters:''};
res.render('compbase_add', {
title: 'Komponensek felvétele',
errors:errors,
igroups: req.itemGroups,
clients: req.clients,
rot: req.user.isAdmin,
user: req.user,
comp: component,
});
} else {
ComponentBase.findOne({itemNumber: req.body.itemNumber,supplierId: req.body.supplierId},function(err,component)
{
//console.log(certs);
if (err)
{
console.log(err);
return;
}
if (component)
{
req.flash('error','Ez a cikkszám már szerepel az '+req.body.supplier+' beszállító adatbázisban!');// <a href="/articles/'+component.deviceID+'/'+component.workID+'"> Katt a megtekintéshez</a>.');
console.log('Már létező componentID: '+component._id);
res.render('compbase_add', {
title: 'Komponensek felvétele',
errors:errors,
igroups: req.itemGroups,
rot: req.user.isAdmin,
user: req.user,
clients: req.clients,
// comp: component,
});
}
else
{
let component=new ComponentBase();
component.manufacturer=req.body.manufacturer;
component.name=req.body.compName;
component.parameters=req.body.compParams;
component.itemUnit=req.body.itemUnit;
component.itemNumber=req.body.itemNumber;
component.itemGroup=req.body.itemGroupName;
component.ean1=req.body.ean1.replace('ö','0');
component.valuta=req.body.valuta;
component.price=req.body.itemPrice;
component.stock=0;
component.options='OWN';
component.minimumStock=req.body.minStock;
component.supplierId=req.body.supplierId;
component.save(function(err){
if(err){
console.log(err);
return;
}else{
if (req.body.action==='save')
{
req.flash('success','Komponenes sikeresen hozzáadva.');
res.redirect('/');
}
if (req.body.action==='saveAndNew')
{
req.flash('success','Komponenes sikeresen hozzáadva.');
res.redirect('/components_base/new');
}
}
});
}
});
}
});
module.exports = router;