From 65853cf75936ce3d82992799464b6513f96bec0e Mon Sep 17 00:00:00 2001 From: Andrei Duvakin Date: Tue, 28 Jan 2025 19:12:54 +0500 Subject: [PATCH] ._. --- API/main.py | 24 ++++++++++++++++ WEB/app/public/img.png | Bin 0 -> 18871 bytes WEB/app/src/app/app.css | 13 +++++++++ WEB/app/src/app/components/сalendar.js | 38 +++++++++++++++++++++++-- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 WEB/app/public/img.png diff --git a/API/main.py b/API/main.py index 50059cb..b92c816 100644 --- a/API/main.py +++ b/API/main.py @@ -332,6 +332,30 @@ def get_events(): return resp +@app.route('/users_birthdays') +def get_users_birthday(): + resp = [] + + with connect() as session: + employees = session.query(User).all() + + for employee in employees: + resp.append( + { + 'id': employee.id, + 'first_name': employee.first_name, + 'last_name': employee.last_name, + 'patronymic': employee.patronymic, + 'email': employee.email, + 'phone': employee.work_phone, + 'post': employee.post.title, + 'birthday': str(employee.birthday) + } + ) + + return resp + + def main(): init_db() app.run('0.0.0.0') diff --git a/WEB/app/public/img.png b/WEB/app/public/img.png new file mode 100644 index 0000000000000000000000000000000000000000..2281d50801ded49f61c2fdbac84c4b6e26f15284 GIT binary patch literal 18871 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 { const [currentDate, setCurrentDate] = useState(new Date()); - const today = new Date(); // Текущая дата (для сравнения) + const [birthdays, setBirthdays] = useState([]); + const today = new Date(); const year = currentDate.getFullYear(); const month = currentDate.getMonth(); + useEffect(() => { + fetchBirthdays(); + }, [year, month]); + + const fetchBirthdays = async () => { + try { + const response = await fetch("http://localhost:5000/users_birthdays"); + if (response.ok) { + const data = await response.json(); + setBirthdays(data); + } + } catch (error) { + console.error("Ошибка загрузки дней рождений:", error); + } + }; + + const getBirthdaysForDay = (day) => { + return birthdays.filter((user) => { + const birthday = new Date(user.birthday); + return birthday.getDate() === day && birthday.getMonth() === month; + }); + }; + const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1)); const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1)); @@ -49,6 +73,16 @@ const Calendar = () => { }`} > {day} + {getBirthdaysForDay(day).length > 0 && ( +
+ {""} +
+ {getBirthdaysForDay(day).map(user => ( +
{user.last_name} {user.first_name}
+ ))} +
+
+ )} ) : (