Ejemplo n.º 1
0
    def combine_databases(self, source_file, dest_file):
        source = RecipeBook(source_file)
        dest = RecipeBook(dest_file)
        source.cursor.execute("""
            SELECT *
            FROM Recipe""")
        results = source.cursor.fetchall()
        if results:
            force = None
            for r in results:
                result = source.cursor.execute(
                    """
                    SELECT ri.amount AS 'Amount',
                    mu.name AS 'Unit of Measure',
                    i.name AS 'Ingredient',
                    ri.order_num AS 'Order'
                    FROM Recipe r
                    JOIN RecipeIngredient ri on r.id = ri.recipe_id
                    JOIN Ingredient i on i.id = ri.ingredient_id
                    LEFT OUTER JOIN Measure mu on mu.id = measure_id
                    WHERE r.id = ?""", [r[0]])
                ingredients = []
                for i in sorted(result, key=lambda tup: tup[3]):
                    ingredients.append(i)

                dest.cursor.execute(
                    """
                    SELECT *
                    FROM Recipe r
                    WHERE r.name = ?""", [r[1]])
                result = dest.cursor.fetchone()
                if result:
                    if force == None:
                        d = ModalWindow(
                            self.my_gui, "Overwrite All",
                            "Warning: Duplicate recipe names exist.\nDo you want to overwrite all duplicates?\n(Choosing 'No' will result in a prompt for each duplicate case)"
                        )
                        self.my_gui.wait_window(d.modalWindow)
                        force = (d.choice == 'Yes')
                    if not force:
                        d = ModalWindow(
                            self.my_gui, "Overwrite Recipe",
                            "Warning: Recipe name already exists.\nDo you want to overwrite {}?"
                            .format(r[1]))
                        self.my_gui.wait_window(d.modalWindow)
                        if d.choice == 'Yes':
                            dest.add(r[1], r[2], r[3], r[4], r[5], r[6], r[7],
                                     ingredients, True)
                    else:
                        dest.add(r[1], r[2], r[3], r[4], r[5], r[6], r[7],
                                 ingredients, force)
                else:
                    dest.add(r[1], r[2], r[3], r[4], r[5], r[6], r[7],
                             ingredients, False)
        source.close()
        dest.renumber()
        dest.close(True)
Ejemplo n.º 2
0
 def save_recipe(self):
     self.name_text.config(bg="white")
     self.serv_text.config(bg="white")
     self.prep_text.config(bg="white")
     self.cook_text.config(bg="white")
     self.ingr_amount.config(bg="white")
     self.ingr_text.config(bg="white")
     if len(self.name_text.get("1.0", END).strip()) == 0:
         self.name_text.config(bg="red")
         self.name_text.focus()
         return
     servings = self.serv_text.get("1.0", END)
     if servings.strip() == "-":
         servings = "0"
     try:
         servings = int(servings)
         if servings < 0:
             raise ValueError()
     except ValueError as e:
         self.serv_text.config(bg="red")
         self.serv_text.focus()
         return
     try:
         prep = float(self.prep_text.get("1.0", END))
         if prep < 0:
             raise ValueError()
     except ValueError as e:
         self.prep_text.config(bg="red")
         self.prep_text.focus()
         return
     try:
         cook = float(self.cook_text.get("1.0", END))
         if cook < 0:
             raise ValueError()
     except ValueError as e:
         self.cook_text.config(bg="red")
         self.cook_text.focus()
         return
     force = False
     book = RecipeBook(self.database)
     name = self.name_text.get("1.0", END).strip()
     book.cursor.execute(
         """
         SELECT *
         FROM Recipe r
         WHERE r.name = ?""", [name])
     result = book.cursor.fetchone()
     if result:
         d = ModalWindow(
             self, "Overwrite Recipe",
             "Warning: Recipe name already exists.\nDo you want to overwrite?"
         )
         self.wait_window(d.modalWindow)
         if d.choice == 'Yes':
             force = True
             self.old_id = result[0]
         else:
             book.close()
             return
     book.add(name,
              self.desc_text.get("1.0", END).strip(),
              self.inst_text.get("1.0",
                                 END).strip().replace('^o', u'°'), servings,
              self.note_text.get("1.0", END).strip(), prep, cook,
              [(ingr[0], ingr[1].strip(), ingr[2].strip())
               for ingr in self.ingr_list.get(0, END)], force)
     book.close(True)
     self.master.destroy()
     self.final = name