Netdeploy2 Babyyyy
This commit is contained in:
15
models/client.py
Normal file
15
models/client.py
Normal 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
4
models/init.py
Normal 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
28
models/invoice.py
Normal 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
13
models/payment.py
Normal 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
36
models/quote.py
Normal 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)
|
||||
Reference in New Issue
Block a user