@ozdao/prometheus-framework 0.2.60 → 0.2.61
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/auth.server.js +12 -223
- package/dist/auth.server.mjs +12 -223
- package/dist/community.server.js +3 -2
- package/dist/community.server.mjs +2 -1
- package/dist/events.server.js +101 -29
- package/dist/events.server.mjs +100 -28
- package/dist/files.server.js +7 -7
- package/dist/files.server.mjs +7 -7
- package/dist/gallery.server.js +2 -2
- package/dist/gallery.server.mjs +2 -2
- package/dist/main-DsseFd2d.mjs +13753 -0
- package/dist/main-U466Gwzt.js +91 -0
- package/dist/main.css +1 -1
- package/dist/metadata.schema-CS6_9GLU.js +174 -0
- package/dist/metadata.schema-D88c1Ebp.mjs +175 -0
- package/dist/organizations.server.js +212 -16
- package/dist/organizations.server.mjs +212 -16
- package/dist/ownership.schema-DN0SlQL6.js +36 -0
- package/dist/ownership.schema-oyx6eNkZ.mjs +37 -0
- package/dist/products.server.js +8 -5
- package/dist/products.server.mjs +8 -5
- package/dist/prometheus-framework/src/components/Chips/Chips.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Chips/Chips.vue.js +19 -14
- package/dist/prometheus-framework/src/components/Feed/Feed.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Feed/Feed.vue.js +27 -27
- package/dist/prometheus-framework/src/components/Loader/Loader.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Loader/Loader.vue.js +1 -51
- package/dist/prometheus-framework/src/components/Loader/Loader.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Loader/Loader.vue2.js +51 -1
- package/dist/prometheus-framework/src/components/Popup/Popup.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Popup/Popup.vue.js +1 -72
- package/dist/prometheus-framework/src/components/Popup/Popup.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Popup/Popup.vue2.js +72 -1
- package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Select/Select.vue.js +1 -97
- package/dist/prometheus-framework/src/components/Select/Select.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Select/Select.vue2.js +97 -1
- package/dist/prometheus-framework/src/components/Slider/Slider.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Slider/Slider.vue.js +1 -1
- package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue.js +1 -36
- package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.js +36 -1
- package/dist/prometheus-framework/src/components/Tab/Tab.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Tab/Tab.vue.js +46 -1
- package/dist/prometheus-framework/src/components/Tab/Tab.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Tab/Tab.vue2.js +1 -46
- package/dist/prometheus-framework/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/auth/auth.client.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/auth.client.js +12 -14
- package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/layouts/Auth.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/EnterPassword.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/Invite.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/sections/Feed.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/sections/Feed.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +198 -184
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -0
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.js +168 -0
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue2.cjs +1 -0
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue2.js +1 -0
- package/dist/prometheus-framework/src/modules/events/components/pages/Event.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.js +3 -3
- package/dist/prometheus-framework/src/modules/events/components/sections/Feed.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/sections/Feed.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/sections/List.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/sections/List.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/router/events.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/router/events.js +11 -2
- package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +67 -64
- package/dist/prometheus-framework/src/modules/orders/components/pages/EditOrder.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/orders/components/pages/EditOrder.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Department.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +4 -4
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.js +3 -3
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +24 -24
- package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +3 -3
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Feed.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Feed.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
- package/dist/prometheus-framework/src/modules/organizations/organizations.client.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/organizations.client.js +40 -38
- package/dist/prometheus-framework/src/modules/organizations/store/departments.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/store/departments.js +19 -19
- package/dist/prometheus-framework/src/modules/organizations/store/invites.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/store/invites.js +5 -5
- package/dist/prometheus-framework/src/modules/products/components/blocks/CardLeftover.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/CardLeftover.vue.js +36 -27
- package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/Images360.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/Images360.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.js +7 -7
- package/dist/prometheus-framework/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/Leftovers.vue.js +21 -21
- package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/products/components/pages/ProductRecommmendation.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.js +36 -50
- package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/products/components/sections/PopularProducts.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/products/components/sections/PopularProducts.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEvents.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/ProfileEvents.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/wallet/components/pages/Wallet.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/wallet/components/pages/Wallet.vue.js +2 -2
- package/dist/prometheus-framework.cjs.js +1 -1
- package/dist/prometheus-framework.es.js +1 -1
- package/dist/style.css +1 -1
- package/dist/web-D7bW32Ul.mjs +54 -0
- package/dist/web-DpE9HxA3.js +1 -0
- package/package.json +1 -1
- package/src/components/Chips/Chips.vue +2 -2
- package/src/components/Feed/Feed.vue +2 -1
- package/src/modules/auth/auth.client.js +0 -2
- package/src/modules/auth/auth.server.js +1 -7
- package/src/modules/auth/components/pages/Invite.vue +1 -1
- package/src/modules/events/components/pages/EditEvent.vue +19 -0
- package/src/modules/events/components/pages/EditEventTickets.vue +194 -0
- package/src/modules/events/controllers/tickets.controller.js +103 -28
- package/src/modules/events/models/ticket.model.js +22 -4
- package/src/modules/events/router/events.js +5 -0
- package/src/modules/events/routes/tickets.routes.js +2 -2
- package/src/modules/events/store/tickets.js +1 -0
- package/src/modules/globals/components/blocks/CardHeader.vue +6 -6
- package/src/modules/organizations/components/pages/Members.vue +1 -1
- package/src/modules/organizations/components/pages/Organization.vue +4 -4
- package/src/modules/organizations/components/sections/MembersAdd.vue +1 -1
- package/src/modules/organizations/controllers/departments.controller.js +14 -1
- package/src/modules/organizations/models/department.model.js +5 -1
- package/src/modules/organizations/organizations.client.js +2 -0
- package/src/modules/organizations/organizations.server.js +6 -2
- package/src/modules/organizations/routes/departments.routes.js +1 -1
- package/src/modules/organizations/store/departments.js +3 -2
- package/src/modules/products/components/blocks/CardLeftover.vue +19 -7
- package/src/modules/products/components/pages/EditLeftover.vue +1 -1
- package/src/modules/products/components/pages/Leftovers.vue +14 -3
- package/src/modules/products/components/pages/Products.vue +8 -8
- package/src/modules/products/models/leftover.model.js +9 -5
- package/src/modules/users/models/client.model.js +60 -0
- /package/src/modules/{auth → organizations}/controllers/invites.controller.js +0 -0
- /package/src/modules/{auth → organizations}/models/invite.model.js +0 -0
- /package/src/modules/{auth → organizations}/routes/invites.routes.js +0 -0
- /package/src/modules/{auth → organizations}/store/invites.js +0 -0
@@ -1,8 +1,110 @@
|
|
1
1
|
const QRCode = require("qrcode");
|
2
|
+
const Jimp = require('jimp');
|
3
|
+
const path = require('path');
|
2
4
|
|
3
|
-
const
|
5
|
+
const { sendEmail } = require('@pf/src/modules/globals/utils/mailing');
|
6
|
+
|
7
|
+
const controllerFactory = (db, publicPath) => {
|
4
8
|
const Ticket = db.ticket;
|
5
9
|
|
10
|
+
// Функция для создания билета, генерации QR-кода и сохранения билета
|
11
|
+
async function saveAndSendTicket(ticketData) {
|
12
|
+
console.log(ticketData);
|
13
|
+
const ticket = new Ticket(ticketData);
|
14
|
+
|
15
|
+
const data = await ticket.save();
|
16
|
+
|
17
|
+
// Работа с QR-кодом
|
18
|
+
const qrData = data._id.toString();
|
19
|
+
const qrCode = await QRCode.toDataURL(qrData, { errorCorrectionLevel: 'H', type: 'image/png' });
|
20
|
+
|
21
|
+
data.status = "unused";
|
22
|
+
data.qrcode = qrCode;
|
23
|
+
|
24
|
+
data.client_refactor.name = ticketData.name
|
25
|
+
data.client_refactor.email = ticketData.email
|
26
|
+
|
27
|
+
// Путь к шаблону билета и куда сохранить измененный
|
28
|
+
const templatePath = path.join(publicPath, 'tickets', 'template.png');
|
29
|
+
const outputPath = path.join(publicPath, 'tickets', `ticket-${data._id}.png`);
|
30
|
+
data.image = `/tickets/ticket-${data._id}.png`;
|
31
|
+
|
32
|
+
// Загрузка шаблона билета
|
33
|
+
const ticketTemplate = await Jimp.read(templatePath);
|
34
|
+
|
35
|
+
// Генерация QR-кода в виде изображения
|
36
|
+
const qrImage = await Jimp.read(Buffer.from(qrCode.split(",")[1], 'base64'));
|
37
|
+
|
38
|
+
const resizedQrWidth = qrImage.bitmap.width * 1.5;
|
39
|
+
const resizedQrHeight = qrImage.bitmap.height * 1.5;
|
40
|
+
qrImage.resize(resizedQrWidth, resizedQrHeight);
|
41
|
+
|
42
|
+
// Вычисление позиции для QR-кода после изменения размера
|
43
|
+
const { width: templateWidth, height: templateHeight } = ticketTemplate.bitmap;
|
44
|
+
|
45
|
+
const xPosition = (templateWidth - resizedQrWidth) / 2;
|
46
|
+
const yPosition = (templateHeight / 2 - resizedQrHeight / 2) + 275; // Немного ниже центра
|
47
|
+
|
48
|
+
// Добавление QR-кода на шаблон билета
|
49
|
+
await ticketTemplate.composite(qrImage, xPosition, yPosition);
|
50
|
+
|
51
|
+
// Сохранение измененного билета
|
52
|
+
await ticketTemplate.writeAsync(outputPath);
|
53
|
+
|
54
|
+
if (ticketData.email) {
|
55
|
+
const emailBody = `
|
56
|
+
<h1>Your Ticket from ${process.env.APP_NAME}</h1>
|
57
|
+
<p>Dear ${ticketData.name || 'Anonymous'},<br>
|
58
|
+
Your ticket is now ready.<br>
|
59
|
+
Please find your ticket attached below:</p>
|
60
|
+
<img src="${process.env.API_URL + data.image}" alt="Ticket Image" style="width:100%;max-width:600px;height:auto;">
|
61
|
+
Keep this ticket safe, and show the QR code at the entrance.<br>
|
62
|
+
Looking forward to seeing you!<br>
|
63
|
+
Best regards,<br>
|
64
|
+
<p>The ${process.env.APP_NAME} Team</p>
|
65
|
+
`;
|
66
|
+
|
67
|
+
try {
|
68
|
+
const emailSent = await sendEmail(ticketData.email, `Your Ticket from ${process.env.APP_NAME}`, emailBody);
|
69
|
+
} catch(err){
|
70
|
+
console.log(err)
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
// Обновление билета с сгенерированным QR-кодом
|
75
|
+
await data.save();
|
76
|
+
|
77
|
+
return data; // Возвращаем данные для дальнейшего использования
|
78
|
+
}
|
79
|
+
|
80
|
+
const create = async (req, res) => {
|
81
|
+
// Проверяем, является ли тело запроса массивом
|
82
|
+
if (Array.isArray(req.body)) {
|
83
|
+
// Если тело запроса - массив, обрабатываем каждый элемент массива
|
84
|
+
const ticketsData = req.body;
|
85
|
+
|
86
|
+
try {
|
87
|
+
const ticketsPromises = ticketsData.map(ticketData =>
|
88
|
+
saveAndSendTicket(ticketData)
|
89
|
+
);
|
90
|
+
const tickets = await Promise.all(ticketsPromises);
|
91
|
+
res.json(tickets); // Отправляем массив сохраненных билетов
|
92
|
+
} catch (err) {
|
93
|
+
console.log(err)
|
94
|
+
res.status(500).send({ errorCode: "SERVER_ERROR" });
|
95
|
+
}
|
96
|
+
} else {
|
97
|
+
// Если тело запроса не массив, обрабатываем как один объект
|
98
|
+
try {
|
99
|
+
const data = await saveAndSendTicket(req.body);
|
100
|
+
res.json(data); // Отправляем данные одного билета
|
101
|
+
} catch (err) {
|
102
|
+
console.log(err)
|
103
|
+
res.status(500).send({ errorCode: "SERVER_ERROR" });
|
104
|
+
}
|
105
|
+
}
|
106
|
+
};
|
107
|
+
|
6
108
|
const read = async (req, res) => {
|
7
109
|
let query = {};
|
8
110
|
let options = {};
|
@@ -34,33 +136,6 @@ const controllerFactory = (db) => {
|
|
34
136
|
}
|
35
137
|
};
|
36
138
|
|
37
|
-
const create = async (req, res) => {
|
38
|
-
const newTicket = new Ticket({
|
39
|
-
user: req.body.user,
|
40
|
-
type: req.body.type,
|
41
|
-
target: req.body.target,
|
42
|
-
role: req.body.role
|
43
|
-
});
|
44
|
-
|
45
|
-
try {
|
46
|
-
const data = await newTicket.save();
|
47
|
-
|
48
|
-
// Working with qrcode
|
49
|
-
const qrData = data._id.toString();
|
50
|
-
const qrCode = await QRCode.toDataURL(qrData);
|
51
|
-
|
52
|
-
data.status = "unused";
|
53
|
-
data.qrcode = qrCode;
|
54
|
-
|
55
|
-
// Updated ticked with generated qrcode
|
56
|
-
await data.save();
|
57
|
-
|
58
|
-
res.send(data);
|
59
|
-
} catch (err) {
|
60
|
-
res.status(500).send({ errorCode: "SERVER_ERROR" });
|
61
|
-
}
|
62
|
-
};
|
63
|
-
|
64
139
|
const update = async (req, res) => {
|
65
140
|
try {
|
66
141
|
const { _id } = req.body;
|
@@ -1,17 +1,28 @@
|
|
1
1
|
module.exports = (mongoose) => {
|
2
2
|
const TicketSchema = new mongoose.Schema({
|
3
|
+
client: {
|
4
|
+
type: mongoose.Schema.Types.ObjectId,
|
5
|
+
ref: 'Client',
|
6
|
+
},
|
7
|
+
client_refactor: {
|
8
|
+
email: {
|
9
|
+
type: String,
|
10
|
+
},
|
11
|
+
name: {
|
12
|
+
type: String,
|
13
|
+
},
|
14
|
+
},
|
3
15
|
user: {
|
4
16
|
type: mongoose.Schema.Types.ObjectId,
|
5
17
|
ref: 'User',
|
6
|
-
required: true,
|
7
18
|
},
|
8
19
|
type: {
|
9
20
|
type: String,
|
10
21
|
enum: ['event','parking'],
|
11
|
-
default: '
|
22
|
+
default: 'event',
|
12
23
|
required: true,
|
13
24
|
},
|
14
|
-
target: {
|
25
|
+
target: {
|
15
26
|
type: mongoose.Schema.Types.ObjectId,
|
16
27
|
ref: function (value) {
|
17
28
|
if (this.type === 'event') return 'Event';
|
@@ -26,11 +37,18 @@ module.exports = (mongoose) => {
|
|
26
37
|
qrcode: {
|
27
38
|
type: String,
|
28
39
|
},
|
40
|
+
image: {
|
41
|
+
type: String,
|
42
|
+
},
|
29
43
|
status: {
|
30
44
|
type: String,
|
31
|
-
enum: ["unused", "used"],
|
45
|
+
enum: ["unused", "used","deactivated"],
|
32
46
|
deafult: "unused",
|
33
47
|
},
|
48
|
+
}, {
|
49
|
+
timestamps: {
|
50
|
+
currentTime: () => Date.now()
|
51
|
+
}
|
34
52
|
});
|
35
53
|
|
36
54
|
TicketSchema.index({ user: 1, type: 1, target: 1 });
|
@@ -50,6 +50,11 @@ const eventsRoutes = [
|
|
50
50
|
name: 'Edit Event',
|
51
51
|
meta: { authorize: [] },
|
52
52
|
component: () => import(/* webpackChunkName: 'EditEvent' */ '../components/pages/EditEvent.vue')
|
53
|
+
},{
|
54
|
+
path: 'events/:url/edit/tickets',
|
55
|
+
name: 'Edit Event Tickets',
|
56
|
+
meta: { authorize: [] },
|
57
|
+
component: () => import(/* webpackChunkName: 'EditEvent' */ '../components/pages/EditEventTickets.vue')
|
53
58
|
}
|
54
59
|
];
|
55
60
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
// Factories
|
2
2
|
const controllerFactory = require("../controllers/tickets.controller");
|
3
3
|
// Routes
|
4
|
-
module.exports = function(app, db, origins) {
|
5
|
-
const controller = controllerFactory(db);
|
4
|
+
module.exports = function(app, db, origins, publicPath) {
|
5
|
+
const controller = controllerFactory(db, publicPath);
|
6
6
|
|
7
7
|
app.use(function(req, res, next) {
|
8
8
|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
class="w-100 flex-nowrap flex-v-center flex"
|
12
12
|
>
|
13
13
|
<img
|
14
|
-
v-if="owner.target
|
14
|
+
v-if="owner.target?.profile?.photo?.length > 0 && type !== 'short'"
|
15
15
|
:src="(FILE_SERVER_URL || '') + owner.target.profile.photo"
|
16
16
|
class="radius-medium object-fit-cover mn-r-thin i-thin"
|
17
17
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
/>
|
25
25
|
|
26
26
|
<PlaceholderUserpic
|
27
|
-
v-if="!owner.target
|
27
|
+
v-if="!owner.target?.profile?.photo && type !== 'short'"
|
28
28
|
class="radius-medium mn-r-thin i-thin"
|
29
29
|
|
30
30
|
@click.stop="$router.push({
|
@@ -48,19 +48,19 @@
|
|
48
48
|
}
|
49
49
|
})"
|
50
50
|
>
|
51
|
-
{{owner.target
|
51
|
+
{{owner.target?.profile?.name}}
|
52
52
|
</span>
|
53
53
|
|
54
54
|
<span
|
55
|
-
v-if="!creator.hidden && owner.target
|
55
|
+
v-if="!creator.hidden && owner.target?.profile?.name !== creator.target?.profile?.name"
|
56
56
|
@click.stop="$router.push({
|
57
57
|
name: 'User Profile',
|
58
58
|
params: {
|
59
|
-
_id: creator.target
|
59
|
+
_id: creator.target?._id
|
60
60
|
}
|
61
61
|
})"
|
62
62
|
>
|
63
|
-
· by {{creator.target
|
63
|
+
· by {{creator.target?.profile?.name}}
|
64
64
|
</span>
|
65
65
|
<span v-if="date">
|
66
66
|
· {{getTimeElapsed(date)}}
|
@@ -81,7 +81,7 @@ import User from '@pf/src/modules/organizations/components/blocks/User.vue';
|
|
81
81
|
|
82
82
|
|
83
83
|
import * as auth from '@pf/src/modules/auth/store/auth'
|
84
|
-
import * as invites from '@pf/src/modules/
|
84
|
+
import * as invites from '@pf/src/modules/organizations/store/invites';
|
85
85
|
import * as memberships from '@pf/src/modules/organizations/store/memberships';
|
86
86
|
import * as organization from '@pf/src/modules/organizations/store/organizations'
|
87
87
|
import * as departments from '@pf/src/modules/organizations/store/departments';
|
@@ -26,13 +26,13 @@
|
|
26
26
|
}
|
27
27
|
}"
|
28
28
|
:store="{
|
29
|
-
read: (options) => departments.actions.read(
|
29
|
+
read: (options) => departments.actions.read(options),
|
30
30
|
state: null
|
31
31
|
}"
|
32
32
|
:options="{
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
organization: route.params._id,
|
34
|
+
user: auth.state.user._id,
|
35
|
+
hidden: false,
|
36
36
|
}"
|
37
37
|
v-slot="{
|
38
38
|
items
|
@@ -58,7 +58,7 @@
|
|
58
58
|
import Button from '@pf/src/components/Button/Button.vue'
|
59
59
|
// Import validation
|
60
60
|
import * as inputsValidation from '@pf/src/modules/middlewares/client/inputs.validation'
|
61
|
-
import * as invites from '@pf/src/modules/
|
61
|
+
import * as invites from '@pf/src/modules/organizations/store/invites';
|
62
62
|
// Props
|
63
63
|
const props = defineProps({
|
64
64
|
organization: Object,
|
@@ -17,7 +17,20 @@ const controllerFactory = (db) => {
|
|
17
17
|
};
|
18
18
|
|
19
19
|
const read = (req, res) => {
|
20
|
-
|
20
|
+
let query = {};
|
21
|
+
let options = {};
|
22
|
+
|
23
|
+
console.log(req.query)
|
24
|
+
|
25
|
+
if (req.query.organization) {
|
26
|
+
query.organization = new db.mongoose.Types.ObjectId(req.query.organization);
|
27
|
+
}
|
28
|
+
|
29
|
+
if (req.query.hidden) {
|
30
|
+
query.hidden = req.query.hidden;
|
31
|
+
}
|
32
|
+
|
33
|
+
Department.find(query, null, options)
|
21
34
|
.populate('members.user')
|
22
35
|
.populate('subdepartments')
|
23
36
|
.then(departments => {
|
@@ -30,6 +30,7 @@ import ButtonToggleMembership from './components/elements/ButtonToggleMembership
|
|
30
30
|
import * as departmentsStore from './store/departments.js';
|
31
31
|
import * as membershipsStore from './store/memberships.js';
|
32
32
|
import * as organizationStore from './store/organizations.js';
|
33
|
+
import * as invitesStore from './store/invites.js';
|
33
34
|
|
34
35
|
// Import Vue Router routes
|
35
36
|
import organizationsRouter from './router/organizations.js';
|
@@ -61,6 +62,7 @@ ButtonToggleMembership,
|
|
61
62
|
departmentsStore,
|
62
63
|
membershipsStore,
|
63
64
|
organizationStore,
|
65
|
+
invitesStore,
|
64
66
|
organizationsRouter
|
65
67
|
};
|
66
68
|
|
@@ -2,26 +2,30 @@
|
|
2
2
|
const DepartmentsController = require('./controllers/departments.controller.js');
|
3
3
|
const OrganizationsController = require('./controllers/organizations.controller.js');
|
4
4
|
const MembershipsController = require('./controllers/memberships.controller.js');
|
5
|
-
|
5
|
+
const InvitesController = require('./controllers/invites.controller.js');
|
6
6
|
// Importing routes
|
7
7
|
const departmentsRoutes = require('./routes/departments.routes.js');
|
8
8
|
const organizationsRoutes = require('./routes/organizations.routes.js');
|
9
9
|
const membershipsRoutes = require('./routes/memberships.routes.js');
|
10
|
-
|
10
|
+
const invitesRoutes = require('./routes/invites.routes.js')
|
11
11
|
// Importing models
|
12
12
|
const DepartmentModel = require('./models/department.model.js');
|
13
13
|
const OrganizationModel = require('./models/organization.model.js');
|
14
14
|
const MembershipModel = require('./models/membership.model.js');
|
15
|
+
const InviteModel = require('./models/invite.model.js');
|
15
16
|
|
16
17
|
// Exporting
|
17
18
|
module.exports = {
|
18
19
|
DepartmentsController,
|
19
20
|
OrganizationsController,
|
20
21
|
MembershipsController,
|
22
|
+
InvitesController,
|
21
23
|
departmentsRoutes,
|
22
24
|
organizationsRoutes,
|
23
25
|
membershipsRoutes,
|
26
|
+
invitesRoutes,
|
24
27
|
DepartmentModel,
|
25
28
|
OrganizationModel,
|
26
29
|
MembershipModel,
|
30
|
+
InviteModel
|
27
31
|
};
|
@@ -14,7 +14,7 @@ module.exports = function(app, db) {
|
|
14
14
|
});
|
15
15
|
|
16
16
|
// Get organization departments by _id
|
17
|
-
app.get("/api/departments
|
17
|
+
app.get("/api/departments/read", controller.read);
|
18
18
|
|
19
19
|
// Get department by _id
|
20
20
|
app.get("/api/departments/get/:_id", controller.readOne);
|
@@ -48,9 +48,10 @@ const actions = {
|
|
48
48
|
}
|
49
49
|
},
|
50
50
|
|
51
|
-
async read(
|
51
|
+
async read(options) {
|
52
52
|
try {
|
53
|
-
const response = await $axios.get(`/api/departments
|
53
|
+
const response = await $axios.get(`/api/departments/read`, { params: options });
|
54
|
+
|
54
55
|
console.log('Response:', response);
|
55
56
|
state.departments = response.data;
|
56
57
|
state.error = null;
|
@@ -1,8 +1,17 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="flex-column pos-relative flex-wrap
|
2
|
+
<div class="flex-column pos-relative flex-wrap">
|
3
|
+
<CardHeader
|
4
|
+
:entity="leftover"
|
5
|
+
:entityType="'leftover'"
|
6
|
+
:user="user"
|
7
|
+
:owner="leftover.creator"
|
8
|
+
:creator="leftover.creator"
|
9
|
+
:date="leftover.createdAt"
|
10
|
+
/>
|
11
|
+
|
3
12
|
<div class="w-100 mn-b-thin flex">
|
4
13
|
<p class="p-big">
|
5
|
-
{{leftover.type}}
|
14
|
+
{{leftover.type}}
|
6
15
|
</p>
|
7
16
|
<IconEdit
|
8
17
|
@click="$router.push({
|
@@ -16,14 +25,16 @@
|
|
16
25
|
/>
|
17
26
|
</div>
|
18
27
|
|
19
|
-
|
20
|
-
|
28
|
+
|
29
|
+
|
30
|
+
<div class="w-100 bg-white radius-small pd-small spoiler">
|
31
|
+
<div @click="spoiler = !spoiler" class="flex">
|
21
32
|
<span>Всего товаров {{leftover.positions.length}}</span>
|
22
33
|
<!-- <img :class="{ 'spoiler-active': spoiler }" class="button-icon" src="@/assets/icons/arrow-down-spoiler.svg"> -->
|
23
34
|
</div>
|
24
35
|
<transition name="fade">
|
25
36
|
<div v-if="spoiler">
|
26
|
-
<div v-for="position in leftover.positions" class="w-100 mn-b-thin flex">
|
37
|
+
<div v-for="position in leftover.positions" class="mn-t-small w-100 mn-b-thin flex">
|
27
38
|
<div class=" w-50 flex">
|
28
39
|
<span>
|
29
40
|
<!-- <span class="t-transp">Название:</span> -->
|
@@ -43,7 +54,7 @@
|
|
43
54
|
</transition>
|
44
55
|
</div>
|
45
56
|
|
46
|
-
|
57
|
+
|
47
58
|
</div>
|
48
59
|
</template>
|
49
60
|
|
@@ -52,11 +63,12 @@
|
|
52
63
|
import { ref } from 'vue'
|
53
64
|
import { useRouter } from 'vue-router'
|
54
65
|
|
66
|
+
import CardHeader from '@pf/src/modules/globals/components/blocks/CardHeader.vue'
|
67
|
+
|
55
68
|
// Icons
|
56
69
|
import IconEdit from '@pf/src/modules/icons/navigation/IconEdit.vue'
|
57
70
|
import PlaceholderUserpic from '@pf/src/modules/icons/placeholders/PlaceholderUserpic.vue'
|
58
71
|
|
59
|
-
|
60
72
|
const router = useRouter()
|
61
73
|
|
62
74
|
const props = defineProps({
|
@@ -69,7 +69,7 @@
|
|
69
69
|
<CardLeftover
|
70
70
|
v-for="leftover in items"
|
71
71
|
:leftover="leftover"
|
72
|
-
class="bg-grey pd-small radius-
|
72
|
+
class="bg-grey pd-small mn-b-thin radius-small"
|
73
73
|
/>
|
74
74
|
</Feed>
|
75
75
|
</div>
|
@@ -95,9 +95,20 @@
|
|
95
95
|
const totalPrice = computed(() => {
|
96
96
|
return leftovers.state.all.reduce((totalSum, item) => {
|
97
97
|
const itemTotal = item.positions.reduce((sum, position) => {
|
98
|
-
return sum +
|
98
|
+
return sum + position.price;
|
99
99
|
}, 0);
|
100
|
-
|
100
|
+
|
101
|
+
// Adjust the sum based on the type of transaction
|
102
|
+
if (item.type === 'stock-in') {
|
103
|
+
// If it's a stock-in, subtract the itemTotal from the totalSum
|
104
|
+
return totalSum - itemTotal;
|
105
|
+
} else if (item.type === 'stock-out') {
|
106
|
+
// If it's a stock-out, add the itemTotal to the totalSum
|
107
|
+
return totalSum + itemTotal;
|
108
|
+
} else {
|
109
|
+
// If the item type is not specified or is different, do not adjust the totalSum
|
110
|
+
return totalSum;
|
111
|
+
}
|
101
112
|
}, 0);
|
102
113
|
});
|
103
114
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
+
|
13
13
|
</button>
|
14
14
|
</header>
|
15
|
-
|
15
|
+
<!--
|
16
16
|
<Tab
|
17
17
|
v-if="route.name !== 'Organization'"
|
18
18
|
v-model:selected="tab"
|
@@ -24,7 +24,7 @@
|
|
24
24
|
]"
|
25
25
|
class="mn-b-small o-hidden h5 radius-big bg-grey"
|
26
26
|
/>
|
27
|
-
|
27
|
+
-->
|
28
28
|
<div class="cols-2-1_3 bg-grey pd-thin radius-big gap-thin">
|
29
29
|
|
30
30
|
<FilterProducts
|
@@ -37,7 +37,7 @@
|
|
37
37
|
placeholder="Enter product name"
|
38
38
|
class="bg-white mn-b-thin"
|
39
39
|
/>
|
40
|
-
|
40
|
+
{{tab}}
|
41
41
|
<Feed
|
42
42
|
:states="{
|
43
43
|
empty: {
|
@@ -104,13 +104,13 @@
|
|
104
104
|
const router = useRouter()
|
105
105
|
|
106
106
|
// Tab logic
|
107
|
-
const tab = ref(route.query.tab ? route.query.tab : 'all')
|
107
|
+
// const tab = ref(route.query.tab ? route.query.tab : 'all')
|
108
108
|
|
109
|
-
route.query.tab = tab.value
|
109
|
+
// route.query.tab = tab.value
|
110
110
|
|
111
|
-
watch(tab, (newValue) => {
|
112
|
-
|
113
|
-
});
|
111
|
+
// watch(tab, (newValue) => {
|
112
|
+
// router.replace({ query: { ...route.query, tab: newValue } });
|
113
|
+
// });
|
114
114
|
|
115
115
|
function updateSearch(search) {
|
116
116
|
let query = { ...route.query}
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
const applyOwnershipSchema = require('@pf/src/modules/globals/models/ownership.schema.js');
|
2
|
+
|
3
|
+
module.exports = (db) => {
|
4
|
+
const LeftoverSchema = new db.mongoose.Schema({
|
3
5
|
organization: {
|
4
|
-
type: mongoose.Schema.Types.ObjectId,
|
6
|
+
type: db.mongoose.Schema.Types.ObjectId,
|
5
7
|
ref: 'Organization',
|
6
8
|
},
|
7
9
|
type: {
|
@@ -18,7 +20,7 @@ module.exports = (mongoose) => {
|
|
18
20
|
},
|
19
21
|
positions: [{
|
20
22
|
_id: {
|
21
|
-
type: mongoose.Schema.Types.ObjectId,
|
23
|
+
type: db.mongoose.Schema.Types.ObjectId,
|
22
24
|
ref: 'Product',
|
23
25
|
},
|
24
26
|
name: {
|
@@ -40,9 +42,11 @@ module.exports = (mongoose) => {
|
|
40
42
|
}
|
41
43
|
});
|
42
44
|
|
45
|
+
applyOwnershipSchema(LeftoverSchema,db);
|
46
|
+
|
43
47
|
LeftoverSchema.index({ user: 1, type: 1, target: 1 });
|
44
48
|
|
45
|
-
const Leftover = mongoose.model('Leftover', LeftoverSchema);
|
49
|
+
const Leftover = db.mongoose.model('Leftover', LeftoverSchema);
|
46
50
|
|
47
51
|
return Leftover;
|
48
52
|
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module.exports = (mongoose) => {
|
2
|
+
|
3
|
+
const ClientSchema = new mongoose.Schema({
|
4
|
+
phone: String,
|
5
|
+
email: String,
|
6
|
+
|
7
|
+
status: {
|
8
|
+
type: String,
|
9
|
+
enum: ['new','lost','converted'],
|
10
|
+
default: 'new',
|
11
|
+
required: true,
|
12
|
+
},
|
13
|
+
|
14
|
+
profile: {
|
15
|
+
photo: {
|
16
|
+
type: String,
|
17
|
+
default: ''
|
18
|
+
},
|
19
|
+
name: {
|
20
|
+
type: String,
|
21
|
+
default: ''
|
22
|
+
},
|
23
|
+
description: {
|
24
|
+
type: String,
|
25
|
+
default: ''
|
26
|
+
},
|
27
|
+
birthday: {
|
28
|
+
type: Date,
|
29
|
+
}
|
30
|
+
},
|
31
|
+
|
32
|
+
socials: {
|
33
|
+
telegram: {
|
34
|
+
type: String,
|
35
|
+
default: ''
|
36
|
+
},
|
37
|
+
twitter: {
|
38
|
+
type: String,
|
39
|
+
default: ''
|
40
|
+
},
|
41
|
+
facebook: {
|
42
|
+
type: String,
|
43
|
+
default: ''
|
44
|
+
},
|
45
|
+
instagram: {
|
46
|
+
type: String,
|
47
|
+
default: ''
|
48
|
+
}
|
49
|
+
},
|
50
|
+
},{
|
51
|
+
// Creation Date
|
52
|
+
timestamps: { currentTime: () => Date.now()
|
53
|
+
}
|
54
|
+
|
55
|
+
});
|
56
|
+
|
57
|
+
const Client = mongoose.model("Client", ClientSchema);
|
58
|
+
|
59
|
+
return Client;
|
60
|
+
}
|
File without changes
|
File without changes
|