-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate.js
149 lines (137 loc) · 4.25 KB
/
create.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
const routes = require("express").Router();
let database = require("../services/database");
const { body, check, validationResult } = require("express-validator");
var multer = require("multer");
const { authUser, authAgency, authRole } = require("../middleware/auth");
const tables = require("../lib/tables");
const ministries = require("../lib/ministries");
const tooltipsCsv = require("../lib/tooltips");
const { user } = require("../services/database");
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./public/uploads/");
},
filename: function (req, file, cb) {
cb(null, Date.now() + "-" + file.originalname); //Date().toLocaleString("el-GR", { timeZone: "Europe/Athens" })
},
});
var upload = multer({ storage: storage }).fields([
{ name: "field_21_upload", maxCount: 10 },
{ name: "field_23_upload", maxCount: 10 },
{ name: "field_36_upload", maxCount: 10 },
{ name: "nomosxedio", maxCount: 1 },
]);
routes.get(
"/:analysis",
authUser,
authRole,
authAgency,
async (req, res, next) => {
const type = req.params.analysis.substring(1); //removing first character
try {
//TODO: remove errors
const valid_errors = req.session.errors;
req.session.errors = null;
const user = req.session.user;
const tooltips = JSON.stringify(await tooltipsCsv.getTooltips());
const ministriesResult = await ministries.getMinistries();
const ministersResult = await ministries.getMinisters(ministriesResult);
const indexesResult = await database.indexes.findAll();
const indexTablesResult = await database.index_tables.findAll();
const indexes = {};
const indexTables = [];
for (i in indexTablesResult) {
indexTables.push(indexTablesResult[i].dataValues.name);
}
for (let i in indexTables) {
indexes[`${indexTables[i]}`] = [];
for (let j in indexesResult) {
if (
indexesResult[i].dataValues.id ===
indexesResult[j].dataValues.indexTableId
) {
indexes[`${indexTables[i]}`].push(indexesResult[j].name);
}
}
indexes[`${indexTables[i]}`].sort();
}
res.render("create", {
type: type,
role: req.session.user.role,
errors: valid_errors,
tooltips: tooltips,
ministers: ministersResult,
ministries: ministriesResult,
user: user,
indexes: indexes,
});
} catch (err) {
// TODO: add status error code
//TODO: should collect all status errors to app.js
console.log("error: " + err);
}
}
);
routes.post(
"/:analysis",
authUser,
authRole,
authAgency,
upload,
[check("title", "Title is required").notEmpty()],
async function (req, res, next) {
const field21 = [];
const field23 = [];
const field36 = [];
const bill = [];
try {
const file = req.files;
if (file.field_21_upload) {
for (i in file.field_21_upload) {
field21.push(file.field_21_upload[i].filename);
}
}
if (file.field_23_upload) {
for (i in file.field_23_upload) {
field23.push(file.field_23_upload[i].filename);
}
}
if (file.field_36_upload) {
for (i in file.field_36_upload) {
field36.push(file.field_36_upload[i].filename);
}
}
if (file.nomosxedio) {
bill.push({
filename: file.nomosxedio[0].filename,
upload_date: req.body.initial_submit,
});
}
} catch (e) {
console.log("Error message: " + e.message);
}
const uploads = [
{ field21: field21, field23: field23, field36: field36, bill: bill },
];
let res_data = await database.analysis.create({
data: req.body,
accountingData: {},
uploads: uploads,
accountingUploads: [],
type: req.body.type,
status: req.body.status,
author: req.session.user.taxId,
});
await database.audit.create({
data: req.body,
type: req.body.type,
status: req.body.status,
timestamp: req.body.initial_submit,
action: req.method,
auditId: res_data.id,
authorTaxId: req.session.user.taxId,
});
res.send({ redirect: "../user_views/history" });
}
);
module.exports = routes;