fix: split numerator/denominator for quantity values

This commit is contained in:
Lance Edgar 2026-03-22 13:58:04 -05:00
parent a5b699a52a
commit d9ed0de775

View file

@ -23,6 +23,8 @@
Base views for Logs
"""
import decimal
import time
from collections import OrderedDict
import colander
@ -398,11 +400,12 @@ class LogMasterView(WuttaFarmMasterView):
units = session.get(model.Unit, new_qty["units"]["uuid"])
assert units
if new_qty["uuid"].startswith("new_"):
num, denom = decimal.Decimal(new_qty["value"]).as_integer_ratio()
qty = self.app.make_true_quantity(
new_qty["quantity_type"]["drupal_id"],
measure_id=new_qty["measure"],
value_numerator=int(new_qty["value"]),
value_denominator=1,
value_numerator=num,
value_denominator=denom,
units=units,
)
# nb. must ensure "typed" quantity record persists!
@ -441,12 +444,19 @@ class LogMasterView(WuttaFarmMasterView):
if old_mtype.uuid.hex not in desired:
quantity.material_types.remove(old_mtype)
def auto_sync_to_farmos(self, client, log):
def auto_sync_to_farmos(self, client, uuid):
model = self.app.model
session = self.Session()
model_class = self.get_model_class()
# nb. ensure quantities have uuid keys
session.flush()
with self.app.short_session(commit=True) as session:
if user := session.query(model.User).filter_by(username="farmos").first():
session.info["continuum_user_id"] = user.uuid
log = None
while not log:
log = session.get(model_class, uuid)
if not log:
time.sleep(0.1)
for qty in log.quantities:
qty = self.app.get_true_quantity(qty)