37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
from datetime import datetime
|
|
from extensions import db
|
|
|
|
class Quote(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
category = db.Column(db.String(30))
|
|
status = db.Column(db.String(20), default="draft")
|
|
|
|
client_id = db.Column(db.Integer, db.ForeignKey("client.id"))
|
|
client = db.relationship("Client", backref="quotes")
|
|
|
|
title = db.Column(db.String(200))
|
|
public_notes = db.Column(db.Text)
|
|
internal_notes = db.Column(db.Text)
|
|
|
|
subtotal = db.Column(db.Numeric(10,2), default=0)
|
|
total = db.Column(db.Numeric(10,2), default=0)
|
|
|
|
milestones_json = db.Column(db.JSON)
|
|
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
class QuoteItem(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
quote_id = db.Column(db.Integer, db.ForeignKey("quote.id"))
|
|
quote = db.relationship("Quote", backref="items")
|
|
|
|
description = db.Column(db.String(255))
|
|
qty = db.Column(db.Numeric(10,2), default=1)
|
|
unit_price = db.Column(db.Numeric(10,2), default=0)
|
|
|
|
@property
|
|
def line_total(self):
|
|
return (self.qty or 0) * (self.unit_price or 0)
|