[Flask] Simple ERP for a farm.
Models! Dingles!
app/models.py
@@ -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}>"