diff --git a/create_tables.sql b/create_tables.sql index 806121e..b504ccd 100644 --- a/create_tables.sql +++ b/create_tables.sql @@ -143,6 +143,7 @@ BEGIN TRY [Работник] varchar(200) COLLATE Cyrillic_General_CI_AS, [Дата_заявки] date, [Дата_принятия] date, + [Действие_до] date, [Решение] varchar(200) COLLATE Cyrillic_General_CI_AS, [Дата_решения] date, [Дополнение] varchar(500) COLLATE Cyrillic_General_CI_AS, diff --git a/index.js b/index.js index 9e72e89..7a4eef9 100644 --- a/index.js +++ b/index.js @@ -1381,6 +1381,113 @@ app.post( } ); +// Обработка POST на получение списка заявок +app.post( + "/forms/getmyapplications", + upload.single("file"), + checkToken, + async (req, res) => { + try { + var { page, searchText } = req.body; + + if (!page) { + page = 1; + } + + const pageSize = 15; + const offset = (page - 1) * pageSize; + + var userData; + var fullname; + + if (req.user.role === "legal") { + userData = await executeQuery( + "SELECT * FROM [Юридические лица] WHERE id = @id", + { + id: req.user.userId, + } + ); + fullname = userData[0].Наименование; + } else { + userData = await executeQuery( + "SELECT * FROM [Физические лица] WHERE id = @id", + { + id: req.user.userId, + } + ); + fullname = `${userData[0].Фамилия} ${userData[0].Имя} ${userData[0].Отчество}`; + } + + let applicationsQuery = ` + SELECT * + FROM [Заявки] + WHERE [Автор] = N'${fullname}' COLLATE Cyrillic_General_CI_AS + `; + + let totalCountQuery = ` + SELECT COUNT(*) AS total + FROM [Заявки] + WHERE [Автор] = N'${fullname}' COLLATE Cyrillic_General_CI_AS + `; + + if (searchText) { + totalCountQuery += ` AND CONCAT( + [Статус] COLLATE Cyrillic_General_CI_AS, ' ', + [Работник] COLLATE Cyrillic_General_CI_AS, ' ', + [Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ', + [Дата_заявки], ' ', + [Дата_принятия], ' ', + [Решение] COLLATE Cyrillic_General_CI_AS, ' ', + [Дата_решения], ' ', + [Дополнение] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_модель] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_марка] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_гос_номер] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ', + [Наименование] COLLATE Cyrillic_General_CI_AS, ' ', + [Организация] COLLATE Cyrillic_General_CI_AS + ) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS`; + + applicationsQuery += ` AND CONCAT( + [Статус] COLLATE Cyrillic_General_CI_AS, ' ', + [Работник] COLLATE Cyrillic_General_CI_AS, ' ', + [Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ', + [Дата_заявки], ' ', + [Дата_принятия], ' ', + [Решение] COLLATE Cyrillic_General_CI_AS, ' ', + [Дата_решения], ' ', + [Дополнение] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_модель] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_марка] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_гос_номер] COLLATE Cyrillic_General_CI_AS, ' ', + [Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ', + [Наименование] COLLATE Cyrillic_General_CI_AS, ' ', + [Организация] COLLATE Cyrillic_General_CI_AS + ) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS`; + } + + applicationsQuery += ` + ORDER BY id DESC + OFFSET ${offset} ROWS + FETCH NEXT ${pageSize} ROWS ONLY + `; + + const applications = await executeQuery(applicationsQuery); + const totalCount = await executeQuery(totalCountQuery); + + res.status(201).json({ + applications: applications, + totalCount: totalCount[0].total, + userData: userData[0], + role: req.user.role, + }); + } catch (error) { + console.error("Ошибка при обработке POST запроса:", error); + res.status(500).json({ message: "Произошла ошибка" }); + } + } +); + // Обработка GET запроса на получение данных конкретной заявки app.get("/forms/application", checkToken, async (req, res) => { try { @@ -1427,7 +1534,7 @@ app.delete("/forms/delete", checkToken, async (req, res) => { } }); -// Обработка PUT запроса с новыми данными пользователя +// Обработка PUT запроса с новыми данными заявки app.put( "/forms/update", upload.single("file"), @@ -1447,6 +1554,7 @@ app.put( tmcunit, tmcquantity, date, + todate, finaldate, additional, } = req.body; @@ -1458,7 +1566,7 @@ app.put( try { const updateResult = await executeQuery( - `UPDATE [Заявки] SET Статус = @status, Работник = @name, Дата_заявки = @date, Дата_решения = @finaldate, Организация = @legal, Решение = @decision, Дополнение = @additional, Авто_модель = @carmodel, Авто_марка = @carbrand, Авто_цвет = @carcolor, Авто_гос_номер = @carnumber, Наименование = @tmcname, Единица_измерения = @tmcunit, Количество = @tmcquantity + `UPDATE [Заявки] SET Статус = @status, Работник = @name, Дата_заявки = @date, Действие_до = @todate, Дата_решения = @finaldate, Организация = @legal, Решение = @decision, Дополнение = @additional, Авто_модель = @carmodel, Авто_марка = @carbrand, Авто_цвет = @carcolor, Авто_гос_номер = @carnumber, Наименование = @tmcname, Единица_измерения = @tmcunit, Количество = @tmcquantity OUTPUT inserted.* WHERE id = @id `, @@ -1466,6 +1574,7 @@ app.put( status: status, name: name, date: date, + todate: todate, finaldate: finaldate, legal: legal, decision: decision, @@ -1482,7 +1591,7 @@ app.put( ); res.status(201).json({ - message: "Данные пользователя успешно обновлены", + message: "Данные заявки успешно обновлены", data: updateResult[0], }); } catch (error) {