Commit 142e2e9d6db1cee9bd49d09232807746241d7eca
1 parent
c151302b
Exists in
master
and in
4 other branches
New Formable class decorates orm classes
adding form import/export facilities.
Showing
2 changed files
with
49 additions
and
39 deletions
Show diff stats
app/main/routes.py
... | ... | @@ -157,7 +157,7 @@ def agent_edit(agent_id=None): |
157 | 157 | db.session.add(this_agent) |
158 | 158 | db.session.commit() |
159 | 159 | # we're done |
160 | - flash(f"Agent {this_agent.fullname} " + done_string) | |
160 | + flash(f"Agent {this_agent.fullname} (#{this_agent.id}) " + done_string) | |
161 | 161 | return redirect(url_for('main.agent', agent_id=this_agent.id)) |
162 | 162 | |
163 | 163 | ... | ... |
app/models.py
... | ... | @@ -5,6 +5,40 @@ db = SQLAlchemy() |
5 | 5 | |
6 | 6 | |
7 | 7 | # |
8 | +# | |
9 | +# | |
10 | + | |
11 | +class Formable: | |
12 | + """ | |
13 | + Parent class allowing some html form facilities | |
14 | + | |
15 | + """ | |
16 | + export_keys = [] | |
17 | + | |
18 | + def from_request(self, form_request): | |
19 | + """ | |
20 | + Get a form request structure and fill in our fields | |
21 | + | |
22 | + :param form_request: | |
23 | + :return: | |
24 | + """ | |
25 | + for key in self.export_keys: | |
26 | + setattr(self, key, form_request.form.get(key)) | |
27 | + | |
28 | + def to_struct(self): | |
29 | + """ | |
30 | + Export the orm object to a structure easily used in jinja | |
31 | + | |
32 | + :return: nothing | |
33 | + """ | |
34 | + _struct = {} | |
35 | + for key in self.export_keys: | |
36 | + _value = getattr(self, key) | |
37 | + _struct[key] = '' if _value is None else _value | |
38 | + return _struct | |
39 | + | |
40 | + | |
41 | +# | |
8 | 42 | # Categorized projects |
9 | 43 | # |
10 | 44 | |
... | ... | @@ -67,7 +101,7 @@ class Company(db.Model): |
67 | 101 | agents = relationship("Agent", back_populates="company") |
68 | 102 | |
69 | 103 | |
70 | -class Agent(db.Model): | |
104 | +class Agent(db.Model, Formable): | |
71 | 105 | id = db.Column(db.Integer, primary_key=True) |
72 | 106 | firstname = db.Column(db.String(100)) |
73 | 107 | secondname = db.Column(db.String(100)) |
... | ... | @@ -83,10 +117,6 @@ class Agent(db.Model): |
83 | 117 | company = relationship("Company", back_populates="agents") |
84 | 118 | |
85 | 119 | @property |
86 | - def export_keys(self): | |
87 | - return ['firstname', 'secondname', 'virtual', 'permanent', 'company_id', 'status_id', 'grade_id', 'bap_id'] | |
88 | - | |
89 | - @property | |
90 | 120 | def fullname(self): |
91 | 121 | return f"{self.secondname} {self.firstname}" |
92 | 122 | |
... | ... | @@ -94,28 +124,19 @@ class Agent(db.Model): |
94 | 124 | def namefull(self): |
95 | 125 | return f"{self.firstname} {self.secondname}" |
96 | 126 | |
97 | - def to_struct(self): | |
98 | - """ | |
99 | - Export the orm object to a structure easily used in jinja | |
127 | + # has to be set as we inherit Formable | |
128 | + # | |
129 | + export_keys = ['firstname', 'secondname', 'virtual', 'permanent', 'company_id', 'status_id', 'grade_id', 'bap_id'] | |
100 | 130 | |
101 | - :return: nothing | |
102 | - """ | |
103 | - _struct = {'agent_id': self.id if self.id else '', | |
104 | - 'fullname': self.fullname} | |
105 | - for key in self.export_keys: | |
106 | - _value = getattr(self, key) | |
107 | - _struct[key] = '' if _value is None else _value | |
108 | - return _struct | |
109 | - | |
110 | - def from_request(self, form_request): | |
131 | + def to_struct(self): | |
111 | 132 | """ |
112 | - Get a form request structure and fill in our fields | |
113 | - | |
114 | - :param form_request: | |
133 | + overide parent method to include one key: agent.fullname | |
115 | 134 | :return: |
116 | 135 | """ |
117 | - for key in self.export_keys: | |
118 | - setattr(self, key, form_request.form.get(key)) | |
136 | + _struct = super(Agent, self).to_struct() | |
137 | + _struct['fullname'] = self.fullname | |
138 | + _struct['agent_id'] = self.id if self.id else '' | |
139 | + return _struct | |
119 | 140 | |
120 | 141 | |
121 | 142 | class Service(db.Model): |
... | ... | @@ -135,7 +156,7 @@ class Period(db.Model): |
135 | 156 | num_months = db.Column(db.Integer) |
136 | 157 | |
137 | 158 | |
138 | -class Charge(db.Model): | |
159 | +class Charge(db.Model, Formable): | |
139 | 160 | id = db.Column(db.Integer, primary_key=True) |
140 | 161 | agent_id = db.Column(db.Integer, db.ForeignKey('agent.id')) |
141 | 162 | project_id = db.Column(db.Integer, db.ForeignKey('project.id')) |
... | ... | @@ -144,17 +165,6 @@ class Charge(db.Model): |
144 | 165 | period_id = db.Column(db.Integer, db.ForeignKey('period.id')) |
145 | 166 | charge_rate = db.Column(db.Integer) |
146 | 167 | |
147 | - @property | |
148 | - def export_keys(self): | |
149 | - return ['agent_id', 'project_id', 'service_id', 'capacity_id', 'period_id', 'charge_rate'] | |
150 | - | |
151 | - def from_request(self, form_request): | |
152 | - """ | |
153 | - Get a form request structure and fill in our fields | |
154 | - | |
155 | - :param form_request: | |
156 | - :return: | |
157 | - """ | |
158 | - for key in self.export_keys: | |
159 | - setattr(self, key, form_request.form.get(key)) | |
160 | - | |
168 | + # Overwrite Formable default to fit our own members | |
169 | + # | |
170 | + export_keys = ['agent_id', 'project_id', 'service_id', 'capacity_id', 'period_id', 'charge_rate'] | ... | ... |