|
@@ -206,7 +206,7 @@ class RecipeEditor(FocusWidget):
|
|
|
AutoCompletePopUp(
|
|
|
ingredient[0],
|
|
|
self.apply_choice,
|
|
|
- lambda: self.activity_manager.show(self.update())
|
|
|
+ lambda: self.activity_manager.show(self.update(ingredient[0]))
|
|
|
), 'streak'), title=f'Product', title_align='left'
|
|
|
) for idx, ingredient in enumerate(self.ingredients)
|
|
|
]
|
|
@@ -220,7 +220,7 @@ class RecipeEditor(FocusWidget):
|
|
|
AutoCompletePopUp(
|
|
|
ingredient[2],
|
|
|
self.apply_choice,
|
|
|
- lambda: self.activity_manager.show(self.update())
|
|
|
+ lambda: self.activity_manager.show(self.update(ingredient[2]))
|
|
|
), 'streak'), title=f'Unit', title_align='left'
|
|
|
) for idx, ingredient in enumerate(self.ingredients)
|
|
|
]
|
|
@@ -244,15 +244,15 @@ class RecipeEditor(FocusWidget):
|
|
|
self.components['right_pane'][1].contents = list(map(lambda x: (x, ('weight',1)), r))
|
|
|
self.components['gutter'][1].contents = list(map(lambda x: (x, ('weight',1)), gutter))
|
|
|
for idx, widget in enumerate(self.ingredients):
|
|
|
- connect_signal(widget[0], 'postchange', lambda _,v: self.update())
|
|
|
+ connect_signal(widget[0], 'postchange', lambda w,_: self.update(w))
|
|
|
connect_signal(widget[0], 'apply', lambda w, name: self.autocomplete_callback(
|
|
|
w, self.autocomplete_options(name, dict(map(
|
|
|
to_unnumbered_field,
|
|
|
filter(in_same_row(name), map(to_numbered_field, self.data.items())
|
|
|
))))
|
|
|
))
|
|
|
- connect_signal(widget[1], 'postchange', lambda _,v: self.update())
|
|
|
- connect_signal(widget[2], 'postchange', lambda _,v: self.update())
|
|
|
+ connect_signal(widget[1], 'postchange', lambda w,_: self.update(w))
|
|
|
+ connect_signal(widget[2], 'postchange', lambda w,_: self.update(w))
|
|
|
connect_signal(widget[2], 'apply', lambda w, name: self.autocomplete_callback(
|
|
|
w, self.autocomplete_options(name, dict(map(
|
|
|
to_unnumbered_field,
|
|
@@ -287,13 +287,15 @@ class RecipeEditor(FocusWidget):
|
|
|
yaml.dump(yml, f)
|
|
|
|
|
|
|
|
|
- def update(self):
|
|
|
+ def update(self, widget = None):
|
|
|
data = self.data
|
|
|
organic = None if data['organic'] == 'mixed' else data['organic']
|
|
|
sort = 'ts'
|
|
|
not_found = '='
|
|
|
- price = list(map(Decimal,[0,0,0]))
|
|
|
- for r in self.ingredients:
|
|
|
+ for r in filter(
|
|
|
+ lambda x: next(filter(lambda x: x is widget or widget is None, x), None),
|
|
|
+ self.ingredients
|
|
|
+ ):
|
|
|
product, quantity, unit = map(lambda x: x.get_edit_text(), r)
|
|
|
|
|
|
try:
|
|
@@ -321,10 +323,20 @@ class RecipeEditor(FocusWidget):
|
|
|
_avg, _min, _max = list(
|
|
|
map(Decimal,df[['avg','min','max']].iloc[0])
|
|
|
)
|
|
|
- price[0] += _min*quantity
|
|
|
- price[1] += _avg*quantity
|
|
|
- price[2] += _max*quantity
|
|
|
- self.price.set_text(f'Cost: {not_found}{price[1]:.2f}')
|
|
|
+ self.prices[r[0].get_edit_text()] = [
|
|
|
+ i*quantity for i in (_min, _avg, _max)
|
|
|
+ ]
|
|
|
+
|
|
|
+ for k in list(self.prices):
|
|
|
+ if k not in map(lambda x: x[0].get_edit_text(), self.ingredients):
|
|
|
+ del self.prices[k]
|
|
|
+
|
|
|
+ price = [
|
|
|
+ sum([self.prices[p][i] for p in self.prices]) for i in range(3)
|
|
|
+ ]
|
|
|
+ self.price.set_text(
|
|
|
+ f'Cost: {not_found}{", ".join([str(p) for p in price])}'
|
|
|
+ )
|
|
|
notice = ''
|
|
|
ingredients = list(filter(lambda x: x, map(lambda x: x[0].get_edit_text(), self.ingredients)))
|
|
|
parsed_products = list(get_products_from_xhtml(markdown(self.instructions.get_edit_text())))
|
|
@@ -354,6 +366,7 @@ class RecipeEditor(FocusWidget):
|
|
|
recipe: dict,
|
|
|
):
|
|
|
self.fname = Edit('', fname)
|
|
|
+ self.prices = dict()
|
|
|
self.components = dict()
|
|
|
self.buttons = {
|
|
|
'clear': Button(('streak', 'Clear')),
|
|
@@ -386,13 +399,13 @@ class RecipeEditor(FocusWidget):
|
|
|
self.query_manager = query_manager
|
|
|
self.autocomplete_options = lambda name, data: self.query_manager.unique_suggestions(name.split('#', 1)[0], **data)
|
|
|
self.autocomplete_callback = lambda widget, options: len(options) > 0 and widget._emit('open', options)
|
|
|
- connect_signal(self.organic, 'postchange', lambda _,v: self.update())
|
|
|
+ connect_signal(self.organic, 'postchange', lambda *_: self.update())
|
|
|
|
|
|
connect_signal(self.buttons['save'], 'click', lambda _: self.save())
|
|
|
connect_signal(self.buttons['add'], 'click', lambda _: self.add_ingredient())
|
|
|
connect_signal(self.buttons['clear'], 'click', lambda _: self.clear())
|
|
|
connect_signal(self.buttons['exit'], 'click', lambda _: show_or_exit('esc'))
|
|
|
- connect_signal(self.instructions, 'postchange', lambda _,v: self.update())
|
|
|
+ connect_signal(self.instructions, 'postchange', lambda w,_: self.update(w))
|
|
|
|
|
|
header = Text(u'Recipe Editor', 'center')
|
|
|
_copyright = Text(COPYRIGHT, 'center')
|