Help

Save the date! Join us on October 16 for our Product Ops launch event. Register here.

Different amounts in different recipes

Topic Labels: Base design
5547 14
cancel
Showing results for 
Search instead for 
Did you mean: 
Doterra_Kaisu
5 - Automation Enthusiast
5 - Automation Enthusiast

Hi!
I’d like to build a simple recipe database. I have different ingredients which are parts in different recipes but the various quantities are the problem. I saw an article about this in here but being a total beginner couldn’t quite understand what it meant.

So I have a table for ingredients and a table for recipes but how I set the quantities. Like:

Recipe #1
2 lemon
2 peppermint
2 lavender

Recipe #2
1 lemon
5 lavender
4 spearmint

So when I am saving my recipe I would like to choose the quantity for each ingredient and the quantity of course is a different one according to the recipe I’m saving to my database.

14 Replies 14

The “Prepare” script was:

let mealsT = base.getTable("Meals")
let mealsQ = await mealsT.selectRecordsAsync()
let meals = mealsQ.records

let recipesT = base.getTable("Recipes")

let today = new Date()
let todayS = today.toLocaleDateString()

let mealsF = meals.filter(x => {
    let date = x.getCellValueAsString("Date")
    let type = x.getCellValue("Meal Type").name
    return date == todayS && type == "Dinner"
})

let recipe = await input.recordAsync("Select a recipe", recipesT)

let meal = mealsF.length ? mealsF[0] : null

if(meal){
    output.markdown(`Recipe added to the meal: ${meal.name}`)
    let recipes = meal.getCellValue("Recipes")
    recipes.push(recipe)
    mealsT.updateRecordAsync(meal.id, {
        "Recipes": recipes
    })
}else {
    mealsT.createRecordAsync({
        "Date": new Date(todayS),
        "Meal Type": {name: "Dinner"},
        "Recipes": [{id: recipe.id}]
    })
    output.markdown(`New meal created`)
}

And the “Create Leftovers” script was:

let mealsT = base.getTable("Meals")
let recipesT = base.getTable("Recipes")
let recipesQ = await recipesT.selectRecordsAsync()

let meal = await input.recordAsync("Select a meal", mealsT)

let start = new Date(meal.getCellValue("Date"))

let mealRecipes = meal.getCellValue("Recipes").map(x => x.id)
let recipes = recipesQ.records.filter(x => mealRecipes.includes(x.id))

let yields = recipes.map(x => x.getCellValue("Yield"))
let minYield = Math.min(...yields) ? Math.min(...yields) : 2

for (let i=1; i < minYield; i++) {
    let x = new Date(start)
    let current = new Date(x.setDate(x.getDate() + i))
    
    mealsT.createRecordAsync({
        "Date": current,
        "Meal Type": meal.getCellValue("Meal Type"),
        "Recipes": recipes.map(x => ({id: x.id})),
        "Leftovers?": true
    })
}

output.markdown(`${minYield - 1} leftover meals added`)
Sasha_Chernysho
5 - Automation Enthusiast
5 - Automation Enthusiast

@Kamille_Parks Thank you for such a quick response, you rock! I was just running some tests of the base to see how it behaves under certain circumstances. I noticed under shopping list, if two recipes use the same ingredient, but it is measured in different units, it will sum the quantity, and aggregate the unit. Any suggestions on which function I could edit to convert different units into one and return a sum decimal? (Not the end of the world, just trying to understand the logic pattern so I don’t mess anything up if I add functionality)

The answer would be to pick a universal unit, and create a formula which converts every possible unit of measurement to it. I didn’t feel like going through that headache, which is why it doesn’t exist in the base I shared.

Karen_King1
4 - Data Explorer
4 - Data Explorer

@Kamille_Parks in one of your bases I downloaded it also has a script for Ingredients. Are you willing to share that script, and does this replace the form you’d previously mentioned? Thank you.

What it does => Takes something like “¼ cup chicken stock” and separates it out into the three different fields that data is supposed to fill.

Will I share it => No. I don’t even use it, filling out the table the normal way isn’t hard, and if I release it I would be answering questions about it ad infinitum since it won’t match everyone’s exact setup.