78 lines
9.6 KiB
JavaScript
78 lines
9.6 KiB
JavaScript
// Fictional one-portion recipes. Reuse the original demo stock without resetting it.
|
||
import {stock as boxStock} from './trial-demo-data.mjs';
|
||
const extra=[
|
||
['potato','Картофель',80,'fresh'],['butter','Масло сливочное',1100,'fresh'],
|
||
['milk','Молоко',110,'fresh'],['egg','Яйцо куриное без скорлупы',260,'fresh'],
|
||
['peas','Горошек зелёный консервированный',300,'grocery'],
|
||
['chicken-raw','Филе куриное сырое',480,'protein'],['whitefish','Филе трески',950,'protein'],
|
||
['lemon','Лимон',300,'fresh'],['rice','Рис сухой',180,'grocery']
|
||
].map(([key,name,cost,supplier])=>({id:`demo-banquet-v1-stock-${key}`,name,cost,unit:'кг',qty:0,min:0.1,supplierId:`demo-v1-supplier-${supplier}`,lastPurchaseDate:'',lastPurchasePrice:0}));
|
||
const products=new Map([...boxStock.map(p=>[p.id.replace('demo-v1-stock-',''),p]),...extra.map(p=>[p.id.replace('demo-banquet-v1-stock-',''),p])]);
|
||
// Gross / prepared net grams per guest; water absorbed by rice is described separately.
|
||
const recipes=[
|
||
['caprese','Капрезе с моцареллой и базиликом','Холодные закуски',290,
|
||
[['mozzarella',50,50],['tomato',70,60],['basil',6,5],['oil',5,5]],['Молоко'],
|
||
['Нарезать томаты и моцареллу.','Выложить слоями, добавить базилик и масло.']],
|
||
['roastbeef','Ростбиф с корнишонами и горчичным соусом','Холодные закуски',390,
|
||
[['beef',65,65],['pickle',22,20],['mustard',5,5],['cooking-cream',10,10]],['Молоко','Горчица'],
|
||
['Нарезать готовый ростбиф тонкими ломтиками.','Смешать сливки с горчицей, подать с корнишонами.']],
|
||
['salmon-roll','Рулетики из лосося со сливочным сыром','Холодные закуски',350,
|
||
[['salmon',45,45],['cream',25,25],['cucumber',22,18],['dill',3,2]],['Рыба','Молоко'],
|
||
['Нарезать лосось и огурец тонкими ломтиками.','Распределить сыр, свернуть рулетики, украсить укропом.']],
|
||
['hummus','Овощные палочки с хумусом','Холодные закуски',230,
|
||
[['carrot',48,40],['cucumber',44,40],['pepper',40,30],['hummus',50,50]],['Кунжут в составе хумуса'],
|
||
['Очистить овощи и нарезать палочками.','Подать с порцией готового хумуса.']],
|
||
['caesar','Салат с курицей, сухариками и сыром','Салаты',340,
|
||
[['chicken',60,60],['lettuce',42,35],['cherry',35,30],['toast',23,20],['gouda',15,15],['cooking-cream',15,15],['mustard',5,5]],['Глютен','Молоко','Горчица'],
|
||
['Подсушить кубики хлеба, подготовить салат и томаты.','Нарезать готовую курицу, соединить с овощами и сыром.','Заправить сливками с горчицей, сверху добавить сухарики.']],
|
||
['olivier','Оливье с индейкой','Салаты',280,
|
||
[['potato',65,50],['carrot',26,20],['turkey',35,35],['egg',22,20],['peas',20,20],['pickle',22,20],['cooking-cream',12,12],['mustard',3,3]],['Яйцо','Молоко','Горчица'],
|
||
['Отварить картофель, морковь и яйцо; остудить.','Нарезать овощи, яйцо, ветчину и корнишоны кубиком.','Добавить горошек и заправить сливками с горчицей.']],
|
||
['greek','Овощной салат с моцареллой и маслинами','Салаты',290,
|
||
[['tomato',55,50],['cucumber',44,40],['pepper',32,25],['mozzarella',40,40],['olive',17,15],['oil',10,10]],['Молоко'],
|
||
['Подготовить и крупно нарезать овощи.','Добавить моцареллу и маслины, заправить маслом.']],
|
||
['julienne','Жюльен с курицей и грибами','Горячие закуски',310,
|
||
[['chicken',40,40],['mushroom',60,40],['onion',15,10],['cooking-cream',25,20],['gouda',15,15],['oil',5,5]],['Молоко'],
|
||
['Обжарить нарезанные грибы и лук на масле.','Добавить готовую курицу и сливки, распределить по формам.','Посыпать сыром и запечь до расплавления.']],
|
||
['stuffed-mushrooms','Шампиньоны, запечённые с сыром','Горячие закуски',270,
|
||
[['mushroom',125,85],['cream',20,20],['gouda',10,10],['dill',3,2],['oil',3,3]],['Молоко'],
|
||
['Подготовить шляпки грибов, ножки мелко нарезать.','Смешать ножки со сливочным сыром и укропом, наполнить шляпки.','Добавить гауду и запечь.']],
|
||
['chicken','Куриное филе с овощами и сливочным соусом','Горячие блюда',490,
|
||
[['chicken-raw',180,135],['pepper',45,30],['carrot',32,25],['cooking-cream',30,25],['oil',5,5]],['Молоко'],
|
||
['Обжарить куриное филе и довести до готовности.','Отдельно приготовить перец и морковь.','Добавить сливочный соус, подать с овощами; учесть потери при приготовлении.']],
|
||
['cod','Треска с лимоном и овощами','Горячие блюда',590,
|
||
[['whitefish',170,130],['tomato',45,35],['pepper',30,20],['lemon',15,10],['oil',5,5]],['Рыба'],
|
||
['Подготовить филе и нарезать овощи.','Запечь рыбу с овощами, лимоном и маслом до готовности.']],
|
||
['beef-hot','Ростбиф с грибами в сливочном соусе','Горячие блюда',690,
|
||
[['beef',125,120],['mushroom',80,55],['onion',24,15],['cooking-cream',30,25],['oil',5,5]],['Молоко'],
|
||
['Обжарить грибы и лук, добавить сливки.','Прогреть готовый ростбиф и подать с грибным соусом.']],
|
||
['mash','Картофельное пюре','Гарниры',160,
|
||
[['potato',170,120],['milk',25,20],['butter',10,10]],['Молоко'],
|
||
['Очистить и отварить картофель, слить воду.','Размять с тёплым молоком и сливочным маслом.']],
|
||
['rice','Рис с овощами','Гарниры',170,
|
||
[['rice',40,40],['carrot',25,20],['pepper',25,20],['peas',15,15],['oil',5,5]],[],
|
||
['Отварить рис; учебный расчёт учитывает 50 г поглощённой воды на порцию.','Приготовить овощи, добавить горошек и смешать с рисом.'],50],
|
||
['berry-cream','Ягодный десерт со сливочным кремом','Десерты',240,
|
||
[['cream',35,35],['cooking-cream',20,20],['biscuit',15,15],['strawberry',28,25],['blueberry',11,10],['sugar',5,5]],['Молоко','Глютен','Яйцо в составе бисквита'],
|
||
['Смешать сыр, сливки и сахарную пудру.','Выложить в креманку бисквит, крем и подготовленные ягоды.']],
|
||
['cheese-honey','Бри с виноградом, мёдом и орехами','Десерты',310,
|
||
[['brie',45,45],['grape',39,35],['walnut',10,10],['honey',10,10]],['Молоко','Орехи'],
|
||
['Нарезать бри и подготовить виноград.','Подать с грецким орехом и мёдом.']],
|
||
['fruit','Фруктово-ягодное ассорти','Фрукты и ягоды',290,
|
||
[['grape',88,80],['strawberry',77,70],['blueberry',32,30]],[],
|
||
['Подготовить ягоды и виноград, удалить плодоножки.','Выложить порционное ассорти.']],
|
||
['bread','Хлебная корзинка с зелёным маслом','Хлеб и масло',120,
|
||
[['baguette',30,30],['rye',20,20],['butter',8,8],['dill',3,2]],['Глютен','Молоко'],
|
||
['Нарезать хлеб, при желании подсушить.','Смешать масло с укропом, подать отдельно.']]
|
||
];
|
||
export const banquet=recipes.map(([key,name,catalogSection,price,quantities,allergens,steps,waterGrams=0],index)=>{
|
||
const rows=quantities.map(([key,gross,net])=>{const p=products.get(key);return {productId:p.id,name:p.name,unit:p.unit,gross:gross/1000,net:net/1000,unitCost:p.cost}});
|
||
const outputGrams=Math.round(rows.reduce((sum,r)=>sum+r.net*1000,waterGrams));
|
||
return {id:`demo-banquet-v1-${key}`,name,category:6,catalogSection,price,weight:`${outputGrams} г`,pieces:1,photo:'',demo:true,
|
||
composition:[rows.map(r=>r.name).join(', ')],ingredients:rows.map(r=>[r.name,r.gross,r.unit]),
|
||
ttk:{number:`ДЕМО-Б${String(index+1).padStart(2,'0')}`,basis:'На 1 порцию / 1 гостя',outputGrams,waterGrams,pieces:1,rows,steps,allergens,
|
||
ingredientCost:Math.round(rows.reduce((sum,r)=>sum+r.gross*r.unitCost,0)*100)/100,
|
||
note:'Учебная рецептура и примерные цены. Выход указан после приготовления. Перед использованием в работе уточните нормы, стоимость и аллергены.'}};
|
||
});
|
||
export const banquetDemo={version:1,banquet,stock:extra};
|