|
1 | 1 | from datetime import datetime |
2 | 2 | from functools import lru_cache |
3 | 3 |
|
4 | | -from sqlalchemy import exc |
| 4 | +from sqlalchemy import exc, false, true |
5 | 5 |
|
6 | 6 | from packet.ldap import ldap_get_member, ldap_is_intromember |
7 | 7 | from .models import Freshman, UpperSignature, FreshSignature, MiscSignature, db, Packet |
@@ -88,6 +88,7 @@ def get_signatures(freshman_username): |
88 | 88 | misc_signatures = db.session.query(MiscSignature.member, Freshman.rit_username) \ |
89 | 89 | .select_from(MiscSignature).join(Packet).join(Freshman) \ |
90 | 90 | .filter(MiscSignature.packet_id == packet.id) \ |
| 91 | + .order_by(MiscSignature.updated.asc()) \ |
91 | 92 | .distinct().all() |
92 | 93 |
|
93 | 94 | return {'eboard': eboard, |
@@ -150,23 +151,41 @@ def get_number_signed(freshman_username, separated=False): |
150 | 151 | .first().signatures_received(not separated) |
151 | 152 |
|
152 | 153 |
|
153 | | -@lru_cache(maxsize=512) |
154 | | -def get_number_required(separated=False): |
| 154 | +@lru_cache(maxsize=256) |
| 155 | +def get_number_required_on_floor(separated=False): |
155 | 156 | """ |
156 | 157 | Get the number of required signatures for Packet (not counting on/off-floor status) |
157 | 158 | :param separated: whether or not to separate those by category |
158 | 159 | :return: a map or an integer of total signatures required |
159 | 160 | """ |
160 | | - return db.session.query(Packet) \ |
161 | | - .filter(Packet.start < datetime.now(), Packet.end > datetime.now()).first().signatures_required(not separated) |
| 161 | + return db.session.query(Packet).join(Freshman).filter( |
| 162 | + Packet.start < datetime.now(), |
| 163 | + Packet.end > datetime.now(), |
| 164 | + Freshman.onfloor == true() |
| 165 | + ).first().signatures_required(not separated) |
| 166 | + |
| 167 | + |
| 168 | +@lru_cache(maxsize=256) |
| 169 | +def get_number_required_off_floor(separated=False): |
| 170 | + """ |
| 171 | + Get the number of required signatures for Packet (not counting on/off-floor status) |
| 172 | + :param separated: whether or not to separate those by category |
| 173 | + :return: a map or an integer of total signatures required |
| 174 | + """ |
| 175 | + return db.session.query(Packet).join(Freshman).filter( |
| 176 | + Packet.start < datetime.now(), |
| 177 | + Packet.end > datetime.now(), |
| 178 | + Freshman.onfloor == false() |
| 179 | + ).first().signatures_required(not separated) |
162 | 180 |
|
163 | 181 |
|
164 | 182 | @lru_cache(maxsize=512) |
165 | 183 | def get_upperclassmen_percent(username, onfloor=False): |
166 | | - required = get_number_required(True) |
167 | | - upperclassmen_required = required['upperclassmen'] + required['eboard'] + required['miscellaneous'] |
168 | 184 | if onfloor: |
169 | | - upperclassmen_required -= 1 |
| 185 | + required = get_number_required_on_floor(True) |
| 186 | + else: |
| 187 | + required = get_number_required_off_floor(True) |
| 188 | + upperclassmen_required = required['upperclassmen'] + required['eboard'] + required['miscellaneous'] |
170 | 189 |
|
171 | 190 | signatures = get_number_signed(username, True) |
172 | 191 | upperclassmen_signature = signatures['upperclassmen'] + signatures['eboard'] + signatures['miscellaneous'] |
@@ -207,7 +226,8 @@ def clear_cache(): |
207 | 226 | """ |
208 | 227 | get_upperclassmen_percent.cache_clear() |
209 | 228 | get_number_signed.cache_clear() |
210 | | - get_number_required.cache_clear() |
| 229 | + get_number_required_on_floor.cache_clear() |
| 230 | + get_number_required_off_floor.cache_clear() |
211 | 231 | signed_packets.cache_clear() |
212 | 232 | get_signatures.cache_clear() |
213 | 233 | get_misc_signatures.cache_clear() |
0 commit comments