Models! Dingles!

Commit
196c3bbf8a140f962845c51e22f409aa6b4d7473
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
app/models.py
index 507d1351..5155ee5a 100644..100644
@@ -3,16 +3,63 @@
3 3
4 4 from flask_sqlalchemy import SQLAlchemy
5 5
6 Added: # from sqlalchemy.orm import declarative_base
7 Added:
6 8 from datetime import datetime
7 9 from flask_login import UserMixin
8 10 from . import db
9 11
12 Added: # Base = declarative_base()
10 13
14 Added:
11 15 def date_time_now():
12 16 return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
13 17
14 18
19 Added: # module_user = db.Table(
20 Added: # "ModuleUser",
21 Added: # Base.metadata,
22 Added: # db.Column("ModuleId", db.String, db.ForeignKey("Module.Name"), primary_key=True),
23 Added: # db.Column("UserId", db.Integer, db.ForeignKey("User.UserId"), primary_key=True),
24 Added: # )
25 Added:
26 Added: # association_table = db.Table('association', Base.metadata,
27 Added: # db.Column('left_id', db.ForeignKey('left.id'), primary_key=True),
28 Added: # db.Column('right_id', db.ForeignKey('right.id'), primary_key=True),
29 Added: # )
30 Added:
31 Added: # class Parent(Base):
32 Added: # __tablename__ = 'left'
33 Added: # id = db.Column(db.Integer, primary_key=True)
34 Added: # children = db.relationship(
35 Added: # "Child",
36 Added: # secondary=association_table,
37 Added: # back_populates="parents")
38 Added:
39 Added: # class Child(Base):
40 Added: # __tablename__ = 'right'
41 Added: # id = db.Column(db.Integer, primary_key=True)
42 Added: # parents = db.relationship(
43 Added: # "Parent",
44 Added: # secondary=association_table,
45 Added: # back_populates="children")
46 Added:
47 Added:
48 Added: class Module(db.Model):
49 Added: __tablename__ = "Module"
50 Added: name = db.Column("Name", db.String(20), nullable=False, primary_key=True)
51 Added: description = db.Column("Description", db.String(50), nullable=False)
52 Added: # users = db.relationship("User", secondary=module_user, backref="modules")
53 Added:
54 Added: def __repr__(self):
55 Added: return f"<Module {self.name}>"
56 Added:
57 Added:
15 58 class User(UserMixin, db.Model):
59 Added: """UserMixin inheritance required for features described here:
60 Added:
61 Added: https://stackoverflow.com/questions/63231163/what-is-the-usermixin-in-flask"""
62 Added:
16 63 __tablename__ = "User"
17 64
18 65 def get_id(self):
@@ -32,23 +79,15 @@
32 79 date_time_updated = db.Column(
33 80 "DateTimeUpdated", db.String, server_onupdate=date_time_now()
34 81 )
82 Added: # modules = db.relationship("Module", secondary=module_user, backref="users")
35 83
36 84 def __repr__(self):
37 85 return f"<User {self.name_first} {self.name_last}>"
38 86
39 87
40 Removed: class Module(db.Model):
41 Removed: __tablename__ = "Module"
42 Removed: name = db.Column(
43 Removed: "Name", db.String(20), unique=True, nullable=False, primary_key=True
44 Removed: )
45 Removed: description = db.Column("Description", db.String(50), nullable=False)
46 Removed:
47 Removed: def __repr__(self):
48 Removed: return f"<Module {self.name}>"
49 Removed:
50 Removed:
51 88 class Customer(db.Model):
89 Added: """One customer has many invoices and orders associated."""
90 Added:
52 91 __tablename__ = "Customer"
53 92 primary_key = db.Column("CustomerId", db.Integer, nullable=False, primary_key=True)
54 93 name = db.Column("Name", db.String(20), nullable=False)
@@ -65,10 +104,15 @@
65 104 professional_id_1 = db.Column("ProfessionalId1", db.String(20), unique=True)
66 105 professional_id_2 = db.Column("ProfessionalId2", db.String(20), unique=True)
67 106 tax_id = db.Column("TaxId", db.String(20), unique=True)
68 Removed: payment_terms = db.Column("PaymentTerms", db.String(20), unique=True)
69 Removed: date_time_created = db.Column("DateTimeCreated", db.String(20), nullable=False)
70 Removed: date_time_updated = db.Column("DateTimeUpdated", db.String(20), nullable=False)
107 Added: payment_terms = db.Column("PaymentTerms", db.String(20))
108 Added: date_time_created = db.Column(
109 Added: "DateTimeCreated", db.String, server_default=date_time_now()
110 Added: )
111 Added: date_time_updated = db.Column(
112 Added: "DateTimeUpdated", db.String, server_onupdate=date_time_now()
113 Added: )
71 114 invoices = db.relationship("Invoice", back_populates="customer")
115 Added: orders = db.relationship("Order", back_populates="customer")
72 116
73 117 def __init__(
74 118 self,
@@ -109,6 +153,8 @@
109 153
110 154
111 155 class Invoice(db.Model):
156 Added: """One invoice has many orders, one customer associated."""
157 Added:
112 158 __tablename__ = "Invoice"
113 159 primary_key = db.Column("InvoiceId", db.Integer, primary_key=True)
114 160 invoice_id_alt = db.Column("InvoiceIdAlt", db.String)
@@ -119,12 +165,15 @@
119 165 amount_gross = db.Column("AmountGross", db.String)
120 166 amount_tax = db.Column("AmountTax", db.String)
121 167 date_time_created = db.Column(
122 Removed: "DateTimeCreated", db.String, default=date_time_now()
168 Added: "DateTimeCreated", db.String, server_default=date_time_now()
123 169 )
124 170 customer_id = db.Column(
125 171 "CustomerId", db.Integer, db.ForeignKey("Customer.CustomerId")
126 172 )
127 Removed: customer = db.relationship("Customer", back_populates="invoices")
173 Added: customer = db.relationship(
174 Added: "Customer", back_populates="invoices", foreign_keys=[customer_id]
175 Added: )
176 Added: orders = db.relationship("Order", back_populates="invoice")
128 177
129 178 def __init__(
130 179 self,
@@ -150,6 +199,51 @@
150 199 return f"<Invoice for {self.customer.name} at {self.updated}>"
151 200
152 201
202 Added: class Order(db.Model): # TODO
203 Added: """One order per line item in invoice."""
204 Added:
205 Added: __tablename__ = "Order"
206 Added: primary_key = db.Column("OrderId", db.Integer, primary_key=True)
207 Added: order_id_alt = db.Column("OrderIdAlt", db.String)
208 Added: delivery_date = db.Column("DateDelivery", db.String(20), nullable=False)
209 Added: date_time_created = db.Column(
210 Added: "DateTimeCreated", db.String, server_default=date_time_now()
211 Added: )
212 Added: date_time_updated = db.Column(
213 Added: "DateTimeUpdated", db.String, server_onupdate=date_time_now()
214 Added: )
215 Added: product_id = db.Column(
216 Added: "ProductId",
217 Added: db.Integer,
218 Added: db.ForeignKey("Product.ProductId"),
219 Added: nullable=False,
220 Added: )
221 Added: customer_id = db.Column(
222 Added: "CustomerId",
223 Added: db.Integer,
224 Added: db.ForeignKey("Customer.CustomerId"),
225 Added: nullable=False,
226 Added: )
227 Added: invoice_id = db.Column(
228 Added: "InvoiceId",
229 Added: db.Integer,
230 Added: db.ForeignKey("Invoice.InvoiceId"),
231 Added: nullable=True,
232 Added: )
233 Added: customer = db.relationship(
234 Added: "Customer", back_populates="orders"
235 Added: )
236 Added: product = db.relationship(
237 Added: "Product", back_populates="orders"
238 Added: )
239 Added: invoice = db.relationship(
240 Added: "Invoice", back_populates="orders"
241 Added: )
242 Added:
243 Added: def __repr__(self):
244 Added: return f"<Order {self.name} at {self.updated}>"
245 Added:
246 Added:
153 247 class Product(db.Model):
154 248 __tablename__ = "Product"
155 249 primary_key = db.Column("ProductId", db.Integer, primary_key=True)
@@ -165,6 +259,8 @@
165 259 date_time_updated = db.Column(
166 260 "DateTimeUpdated", db.String, server_onupdate=date_time_now()
167 261 )
262 Added: # order_id = db.Column("ProductId", db.Integer, db.ForeignKey("Product.ProductId"))
263 Added: orders = db.relationship("Order", back_populates="product")
168 264
169 265 def __init__(
170 266 self,
@@ -244,17 +340,3 @@
244 340
245 341 def __repr__(self):
246 342 return f"<Target ID {self.primary_key}>"
247 Removed:
248 Removed:
249 Removed: # Everything after here is garbage
250 Removed:
251 Removed:
252 Removed: class Order(db.Model): # TODO
253 Removed: id = db.Column(db.Integer, primary_key=True)
254 Removed: date = db.Column(db.String(20), nullable=False)
255 Removed: customer = db.Column(db.String(20), nullable=False)
256 Removed: content = db.Column(db.String(10), nullable=False)
257 Removed: updated = db.Column(db.String)
258 Removed:
259 Removed: def __repr__(self):
260 Removed: return f"<Order {self.name} at {self.updated}>"