|
|
@@ -10,7 +10,7 @@ ORM-модели для service portal (SQLAlchemy 2.0).
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import (
|
|
|
|
from sqlalchemy import (
|
|
|
|
Column, Integer, String, Boolean, Text, DateTime, Numeric, Date, BigInteger, SmallInteger, JSON, ForeignKey, CheckConstraint
|
|
|
|
Column, Integer, String, Boolean, Text, DateTime, Numeric, Date, BigInteger, SmallInteger, JSON, ForeignKey, CheckConstraint, func
|
|
|
|
)
|
|
|
|
)
|
|
|
|
from sqlalchemy.orm import relationship, declarative_base
|
|
|
|
from sqlalchemy.orm import relationship, declarative_base
|
|
|
|
|
|
|
|
|
|
|
@@ -30,7 +30,7 @@ class User(Base):
|
|
|
|
max_user_id = Column(BigInteger, nullable=True)
|
|
|
|
max_user_id = Column(BigInteger, nullable=True)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("role IN ('owner','engineer','technician')", name="ck_users_role"),
|
|
|
|
CheckConstraint("role IN ('owner','engineer','technician')", name="ck_users_role"),
|
|
|
@@ -76,7 +76,7 @@ class Customer(Base):
|
|
|
|
notes = Column(Text)
|
|
|
|
notes = Column(Text)
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("status IN ('active','inactive','prospect')", name="ck_customers_status"),
|
|
|
|
CheckConstraint("status IN ('active','inactive','prospect')", name="ck_customers_status"),
|
|
|
@@ -109,7 +109,7 @@ class Object(Base):
|
|
|
|
region_factor = Column(Numeric(3, 2), default=1.00)
|
|
|
|
region_factor = Column(Numeric(3, 2), default=1.00)
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("status IN ('active','inactive','audit','prospective')", name="ck_objects_status"),
|
|
|
|
CheckConstraint("status IN ('active','inactive','audit','prospective')", name="ck_objects_status"),
|
|
|
@@ -163,7 +163,7 @@ class Task(Base):
|
|
|
|
result_notes = Column(Text)
|
|
|
|
result_notes = Column(Text)
|
|
|
|
closed_at = Column(DateTime)
|
|
|
|
closed_at = Column(DateTime)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("priority IN ('P1','P2','P3','P4')", name="ck_tasks_priority"),
|
|
|
|
CheckConstraint("priority IN ('P1','P2','P3','P4')", name="ck_tasks_priority"),
|
|
|
@@ -227,7 +227,7 @@ class Report(Base):
|
|
|
|
status = Column(String(20), nullable=False, default="draft")
|
|
|
|
status = Column(String(20), nullable=False, default="draft")
|
|
|
|
client_confirmed = Column(Boolean, default=False)
|
|
|
|
client_confirmed = Column(Boolean, default=False)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("report_type IN ('inspection','service','emergency','audit','monthly')", name="ck_reports_type"),
|
|
|
|
CheckConstraint("report_type IN ('inspection','service','emergency','audit','monthly')", name="ck_reports_type"),
|
|
|
@@ -255,7 +255,7 @@ class QuestionnaireSession(Base):
|
|
|
|
object_index = Column(Numeric(5, 2), default=0)
|
|
|
|
object_index = Column(Numeric(5, 2), default=0)
|
|
|
|
sla_price_monthly = Column(Numeric(12, 2), default=0)
|
|
|
|
sla_price_monthly = Column(Numeric(12, 2), default=0)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("status IN ('draft','completed','cancelled')", name="ck_qsessions_status"),
|
|
|
|
CheckConstraint("status IN ('draft','completed','cancelled')", name="ck_qsessions_status"),
|
|
|
@@ -293,7 +293,7 @@ class QuestionnaireItem(Base):
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
help_text = Column(String(500), default="")
|
|
|
|
help_text = Column(String(500), default="")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("type IN ('text','number','select','radio','checkbox','textarea')", name="ck_qitems_type"),
|
|
|
|
CheckConstraint("type IN ('text','number','select','radio','checkbox','textarea')", name="ck_qitems_type"),
|
|
|
@@ -340,7 +340,7 @@ class SLAContract(Base):
|
|
|
|
status = Column(String(20), nullable=False, default="negotiation")
|
|
|
|
status = Column(String(20), nullable=False, default="negotiation")
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("service_level IN ('start','business','enterprise')", name="ck_sla_level"),
|
|
|
|
CheckConstraint("service_level IN ('start','business','enterprise')", name="ck_sla_level"),
|
|
|
@@ -369,7 +369,7 @@ class Incident(Base):
|
|
|
|
sla_breached = Column(Boolean, default=False)
|
|
|
|
sla_breached = Column(Boolean, default=False)
|
|
|
|
resolved_at = Column(DateTime)
|
|
|
|
resolved_at = Column(DateTime)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("severity IN ('P1','P2','P3')", name="ck_incidents_severity"),
|
|
|
|
CheckConstraint("severity IN ('P1','P2','P3')", name="ck_incidents_severity"),
|
|
|
@@ -438,7 +438,7 @@ class BlogPost(Base):
|
|
|
|
status = Column(String(20), nullable=False, default="draft")
|
|
|
|
status = Column(String(20), nullable=False, default="draft")
|
|
|
|
published_at = Column(DateTime)
|
|
|
|
published_at = Column(DateTime)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("category IN ('audit','sla','incident','supervision','documentation','risk','cases')", name="ck_blog_category"),
|
|
|
|
CheckConstraint("category IN ('audit','sla','incident','supervision','documentation','risk','cases')", name="ck_blog_category"),
|
|
|
@@ -458,7 +458,7 @@ class FormulaCoefficient(Base):
|
|
|
|
formula_ref = Column(String(255), default="")
|
|
|
|
formula_ref = Column(String(255), default="")
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
updated_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
updated_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
updater = relationship("User")
|
|
|
|
updater = relationship("User")
|
|
|
|
|
|
|
|
|
|
|
@@ -473,7 +473,7 @@ class Case(Base):
|
|
|
|
sort_order = Column(Integer, nullable=False, default=0)
|
|
|
|
sort_order = Column(Integer, nullable=False, default=0)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
is_active = Column(Boolean, nullable=False, default=True)
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Idea(Base):
|
|
|
|
class Idea(Base):
|
|
|
@@ -485,7 +485,7 @@ class Idea(Base):
|
|
|
|
status = Column(String(20), nullable=False, default="normal")
|
|
|
|
status = Column(String(20), nullable=False, default="normal")
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
created_at = Column(DateTime, nullable=False, server_default="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
__table_args__ = (
|
|
|
|
__table_args__ = (
|
|
|
|
CheckConstraint("status IN ('normal','in_progress','completed')", name="ck_ideas_status"),
|
|
|
|
CheckConstraint("status IN ('normal','in_progress','completed')", name="ck_ideas_status"),
|
|
|
@@ -503,7 +503,7 @@ class QuickMenuItem(Base):
|
|
|
|
url = Column(String(500), nullable=False)
|
|
|
|
url = Column(String(500), nullable=False)
|
|
|
|
sort_order = Column(Integer, nullable=False, default=0)
|
|
|
|
sort_order = Column(Integer, nullable=False, default=0)
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"))
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()")
|
|
|
|
updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
|
|
creator = relationship("User")
|
|
|
|
creator = relationship("User")
|
|
|
|
|
|
|
|
|
|
|
|