Netdeploy2 Babyyyy

This commit is contained in:
Ben Mosley
2026-02-03 17:41:29 -06:00
commit c77674b86d
23 changed files with 659 additions and 0 deletions

15
models/client.py Normal file
View File

@@ -0,0 +1,15 @@
from datetime import datetime
from extensions import db
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
kind = db.Column(db.String(30), default="small_business")
name = db.Column(db.String(120), nullable=False)
company = db.Column(db.String(120))
email = db.Column(db.String(255))
phone = db.Column(db.String(50))
notes = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.utcnow)

4
models/init.py Normal file
View File

@@ -0,0 +1,4 @@
from .client import Client
from .quote import Quote, QuoteItem
from .invoice import Invoice, InvoiceLine
from .payment import Payment

28
models/invoice.py Normal file
View File

@@ -0,0 +1,28 @@
from datetime import datetime
from extensions import db
class Invoice(db.Model):
id = db.Column(db.Integer, primary_key=True)
client_id = db.Column(db.Integer, db.ForeignKey("client.id"))
client = db.relationship("Client", backref="invoices")
quote_id = db.Column(db.Integer, db.ForeignKey("quote.id"))
quote = db.relationship("Quote", backref="invoices")
status = db.Column(db.String(20), default="unpaid")
total = db.Column(db.Numeric(10,2), default=0)
amount_paid = db.Column(db.Numeric(10,2), default=0)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
class InvoiceLine(db.Model):
id = db.Column(db.Integer, primary_key=True)
invoice_id = db.Column(db.Integer, db.ForeignKey("invoice.id"))
invoice = db.relationship("Invoice", backref="lines")
description = db.Column(db.String(255))
qty = db.Column(db.Numeric(10,2))
unit_price = db.Column(db.Numeric(10,2))

13
models/payment.py Normal file
View File

@@ -0,0 +1,13 @@
from datetime import datetime
from extensions import db
class Payment(db.Model):
id = db.Column(db.Integer, primary_key=True)
invoice_id = db.Column(db.Integer, db.ForeignKey("invoice.id"))
invoice = db.relationship("Invoice", backref="payments")
amount = db.Column(db.Numeric(10,2))
method = db.Column(db.String(40))
created_at = db.Column(db.DateTime, default=datetime.utcnow)

36
models/quote.py Normal file
View File

@@ -0,0 +1,36 @@
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)