void Ingridients::writeFood(QJsonObject& json, Food& food) const { PRINT_DEBUG("Writing food" << food.getName()); json["name"] = QString::fromStdString(food.getName()); json["mass"] = static_cast<qint64>(food.getMass()); json["price"] = static_cast<qint64>(food.getPrice()); json["measureType"] = static_cast<int>(food.getUnitType()); json["fats"] = static_cast<qint64>(food.getFats()); json["proteins"] = static_cast<qint64>(food.getProteins()); json["carbohydrates"] = static_cast<qint64>(food.getCarbohydrates()); json["calories"] = static_cast<qint64>(food.getCalories()); }
Dish* Ingridients::readDish(const QJsonObject& json) { PRINT_DEBUG("Reading new dish"); QJsonArray itemsList = json["items"].toArray(); Food* newFood = readFood(itemsList[0].toObject()["food"].toObject()); Dish* newDish = new Dish(json["name"].toString().toStdString(), newFood, itemsList[0].toObject()["amount"].toInt()); avaliableItems.push_back(newFood); newFood->addItemList(&avaliableItems); for ( int index = 1; index < itemsList.size(); index++ ) { newFood = readFood(itemsList[index].toObject()["food"].toObject()); newDish->addFood(newFood, itemsList[index].toObject()["amount"].toInt()); std::list<Item*>::iterator it; for ( it = avaliableItems.begin(); ; it++ ) { if ( !(*it)->getName().compare(newFood->getName()) ) { delete newFood; break; } else if ( it == avaliableItems.end() ) { avaliableItems.push_back(newFood); newFood->addItemList(&avaliableItems); } } } return newDish; }
void Store::initializeFoods() { vector<Food> *foods = fileIO->load(filename); std::cout << "size of foods: " << foods->size() << "\n"; for (int i = 0; i < foods->size(); i++) { Food food = foods->operator[](i); bst->insert(food); if (food.getId() > maxId) { maxId = food.getId(); } numFoods++; } for (int i = 0; i < foods->size(); i++) { Food food = foods->operator[](i); if (foodWithIdExists(food.getId())) { std::stringstream s; s << "Food " << food.getName() << " referencing duplicate ID " << food.getId(); throw s.str(); } hashBrownTable.insertItem(food.getId(), bst->get(food)); } // check nutrients for (int i = 0; i < foods->size(); i++) { // has to work with BST Food food = foods->operator[](i); if (food.isRecipe()) { vector<int> ingredients = food.getIngredients(); vector<Food> ingredientsFood; for (int i = 0; i < ingredients.size(); i++) { int id = ingredients[i]; if (!foodWithIdExists(id)) { std::stringstream s; s << "Food " << food.getName() << " referencing invalid id " << id; throw s.str(); } else { ingredientsFood.push_back(getById(id)); } } food.calculateNutrients(ingredientsFood); } } }
vector<Food> *Store::getMatching(vector<string> keywords) { vector<Food> *foods = getInSortedOrder(); vector<Food> *ret = new vector<Food>(); for (int i = 0; i < foods->size(); i++) { Food food = foods->operator[](i); bool matching = false; for (int j = 0; j < keywords.size(); j++) { if (lower(food.getName()).find(keywords[j]) != -1) { matching = true; } } if (matching) { ret->push_back(food); } } delete foods; return ret; }
void Ingridients::loadFood(const QJsonArray& jsonArray) { PRINT_DEBUG("Loading food"); for ( int i = 0; i < jsonArray.size(); i++ ) { Food* newFood = readFood(jsonArray[i].toObject()); std::list<Item*>::iterator it; for ( it = avaliableItems.begin(); ; it++ ) { if ( !(*it)->getName().compare(newFood->getName()) ) { delete newFood; break; } else if ( it == avaliableItems.end() ) { avaliableItems.push_back(newFood); newFood->addItemList(&avaliableItems); } } } }
bool Food::operator==(const Food &other) { return ( (this->getName() == other.getName()) && (this->getCatagroy() == other.getCatagroy()) ); }
string nodeFoodAsString(BSTNode<Food> *node, string bef) { stringstream stream; Food food = node->getData(); stream << bef << food.getId() << " " << food.getName(); return stream.str(); }