220 lines
6.0 KiB
Python
220 lines
6.0 KiB
Python
from sqlalchemy import create_engine, Column, Integer, VARCHAR, Float, ForeignKey, Date, Text, Boolean, DateTime
|
|
from sqlalchemy.orm import Session, sessionmaker, relationship
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
|
base = declarative_base()
|
|
__factory = None
|
|
|
|
|
|
class Post(base):
|
|
__tablename__ = 'posts'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
users = relationship('User', back_populates='post')
|
|
|
|
|
|
class Department(base):
|
|
__tablename__ = 'departments'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
description = Column(VARCHAR(1000))
|
|
|
|
parent_id = Column(Integer, ForeignKey('departments.id'))
|
|
|
|
|
|
class User(base):
|
|
__tablename__ = 'users'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
first_name = Column(VARCHAR(100))
|
|
last_name = Column(VARCHAR(100))
|
|
patronymic = Column(VARCHAR(100))
|
|
work_phone = Column(VARCHAR(20))
|
|
phone = Column(VARCHAR(20))
|
|
office = Column(VARCHAR(10))
|
|
birthday = Column(Date)
|
|
other_info = Column(Text)
|
|
email = Column(VARCHAR(100))
|
|
password = Column(VARCHAR(150))
|
|
|
|
helper_id = Column(Integer, ForeignKey('users.id'))
|
|
director_id = Column(Integer, ForeignKey('users.id'))
|
|
post_id = Column(Integer, ForeignKey('posts.id'))
|
|
department_id = Column(Integer, ForeignKey('departments.id'))
|
|
|
|
post = relationship('Post', back_populates='users')
|
|
|
|
comments = relationship('Comment', back_populates='user')
|
|
|
|
|
|
class DepartmentUser(base):
|
|
__tablename__ = 'department_users'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
department_id = Column(Integer, ForeignKey('departments.id'))
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
|
|
|
|
class DocumentCategory(base):
|
|
__tablename__ = 'document_categories'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
documents = relationship('Document', back_populates='category')
|
|
|
|
|
|
class Document(base):
|
|
__tablename__ = 'documents'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
date_created = Column(DateTime)
|
|
date_updated = Column(DateTime)
|
|
|
|
category_id = Column(Integer, ForeignKey('document_categories.id'))
|
|
|
|
category = relationship('DocumentCategory', back_populates='documents')
|
|
|
|
comments = relationship('Comment', back_populates='document')
|
|
|
|
|
|
class Comment(base):
|
|
__tablename__ = 'comments'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
text = Column(Text)
|
|
date_created = Column(DateTime)
|
|
date_updated = Column(DateTime)
|
|
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
document_id = Column(Integer, ForeignKey('documents.id'))
|
|
|
|
document = relationship('Document', back_populates='comments')
|
|
user = relationship('User', back_populates='comments')
|
|
|
|
|
|
class MaterialType(base):
|
|
__tablename__ = 'material_types'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
|
|
class MaterialStatus(base):
|
|
__tablename__ = 'material_statuses'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
|
|
class Material(base):
|
|
__tablename__ = 'materials'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
success_date = Column(Date)
|
|
edit_date = Column(DateTime)
|
|
area = Column(Text)
|
|
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
status_id = Column(Integer, ForeignKey('material_statuses.id'))
|
|
type_id = Column(Integer, ForeignKey('material_types.id'))
|
|
|
|
|
|
class EventType(base):
|
|
__tablename__ = 'event_types'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
|
|
class EventStatus(base):
|
|
__tablename__ = 'event_statuses'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
|
|
|
|
class Event(base):
|
|
__tablename__ = 'events'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(VARCHAR(100))
|
|
datetime_event = Column(DateTime)
|
|
short_description = Column(VARCHAR(1500))
|
|
|
|
type_id = Column(Integer, ForeignKey('event_types.id'))
|
|
status_id = Column(Integer, ForeignKey('event_statuses.id'))
|
|
|
|
|
|
class DepartmentEvent(base):
|
|
__tablename__ = 'department_events'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
event_id = Column(Integer, ForeignKey('events.id'))
|
|
department_id = Column(Integer, ForeignKey('departments.id'))
|
|
|
|
|
|
class ResponsibleUser(base):
|
|
__tablename__ = 'responsible_users'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
event_id = Column(Integer, ForeignKey('events.id'))
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
|
|
|
|
class UserEvent(base):
|
|
__tablename__ = 'user_events'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
event_id = Column(Integer, ForeignKey('events.id'))
|
|
user_id = Column(Integer, ForeignKey('users.id'))
|
|
|
|
|
|
class WorkingCalendar(base):
|
|
__tablename__ = 'workingcalendar'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
exceptiondate = Column(Date)
|
|
isworkingday = Column(Boolean)
|
|
|
|
|
|
class Attendance(base):
|
|
__tablename__ = 'attendances'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
date = Column(Date)
|
|
is_attended = Column(Boolean)
|
|
reason = Column(Text)
|
|
|
|
user = Column(Integer, ForeignKey('users.id'))
|
|
|
|
|
|
class VacationTimetable(base):
|
|
__tablename__ = 'vacation_timetable'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
start_date = Column(Date)
|
|
end_date = Column(Date)
|
|
|
|
user = Column(Integer, ForeignKey('users.id'))
|
|
|
|
|
|
def init_db():
|
|
eng = create_engine(
|
|
'postgresql+psycopg2://postgres:2509@localhost:5432/prb1'
|
|
)
|
|
|
|
global __factory
|
|
__factory = sessionmaker(bind=eng)
|
|
base.metadata.create_all(eng)
|
|
|
|
|
|
def connect() -> Session:
|
|
global __factory
|
|
return __factory()
|