File size: 3,492 Bytes
8223b74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Text, LargeBinary
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from .database import Base

class LaborRate(Base):
    """Model for labor rates by job type"""
    __tablename__ = "labor_rates"

    id = Column(Integer, primary_key=True, index=True)
    job_type = Column(String, unique=True, index=True, nullable=False)
    hourly_rate = Column(Float, nullable=False)
    currency = Column(String, default="TRY")
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())

    def __repr__(self):
        return f"<LaborRate(job_type='{self.job_type}', hourly_rate={self.hourly_rate})>"

class Material(Base):
    """Model for materials and their unit prices"""
    __tablename__ = "materials"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True, nullable=False)
    unit = Column(String, nullable=False)  # e.g., kg, meter, piece
    unit_price = Column(Float, nullable=False)
    currency = Column(String, default="TRY")
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())

    def __repr__(self):
        return f"<Material(name='{self.name}', unit='{self.unit}', unit_price={self.unit_price})>"

class MarginProfile(Base):
    """Model for margin profiles by project type"""
    __tablename__ = "margin_profiles"

    id = Column(Integer, primary_key=True, index=True)
    profile_name = Column(String, unique=True, index=True, nullable=False)
    margin_percentage = Column(Float, nullable=False)  # Stored as decimal (e.g., 0.15 for 15%)
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())

    def __repr__(self):
        return f"<MarginProfile(profile_name='{self.profile_name}', margin_percentage={self.margin_percentage})>"

class ChatHistory(Base):
    """Model for storing chat history"""
    __tablename__ = "chat_history"

    id = Column(Integer, primary_key=True, index=True)
    user_input = Column(String, nullable=False)
    assistant_response = Column(String, nullable=False)
    created_at = Column(DateTime(timezone=True), server_default=func.now())

    def __repr__(self):
        return f"<ChatHistory(id={self.id}, created_at={self.created_at})>"

class Document(Base):
    """Model for storing uploaded documents"""
    __tablename__ = "documents"

    id = Column(Integer, primary_key=True, index=True)
    filename = Column(String, nullable=False)
    content_type = Column(String, nullable=False)
    file_path = Column(String, nullable=False)  # Path to stored file
    file_size = Column(Integer, nullable=False)  # Size in bytes
    content_text = Column(Text, nullable=True)  # Extracted text content
    analysis_result = Column(Text, nullable=True)  # Analysis results in JSON format
    document_type = Column(String, nullable=True)  # Type of document (uploaded, generated)
    template_type = Column(String, nullable=True)  # Template type for generated documents
    uploaded_at = Column(DateTime(timezone=True), server_default=func.now())
    analyzed_at = Column(DateTime(timezone=True), nullable=True)

    def __repr__(self):
        return f"<Document(id={self.id}, filename='{self.filename}', uploaded_at={self.uploaded_at})>"