예제 #1
0
파일: Menu_Class.py 프로젝트: freel/canteen
    def setupUi(self):

        self.ui = Ui_Menu()
        self.ui.setupUi(self)
        self.insertValsIntoWidget()
        self.connect(self.ui.saveMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("saveMenu()"))
        self.connect(self.ui.addDishButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("addDish()"))
        self.connect(self.ui.treeWidgetDish, QtCore.SIGNAL("itemClicked ( QTreeWidgetItem*, int )"), self.onClick)
        self.connect(self.ui.addToMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("addToMenu()"))
        self.connect(self.ui.delFromMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("delFromMenu()"))
예제 #2
0
파일: Menu_Class.py 프로젝트: freel/canteen
class Menu_Class(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.parent = parent
        self.setupData()
        self.setupUi()

    def renew(self):
        self.clear()
        self.setupData()

        self.insertValsIntoWidget()

    def renewPortions(self):
        for num in self.productWidget:
            self.productWidget[num].portions = self.productWidget[num].select_max_portions()
            self.productWidget[num].changeCount()
            if self.productWidget[num].portions <= 0:
                self.productWidget[num].setDisabled(True)

## DATA ##

    def setupData(self):
        """Заполнение переменных и формы"""
        self.shift = self.parent.shift
        self.products = self.getProductRest()

    def getProductRest(self):
        """Выбираем остаток продуктов на складе
         ID прихода, ID продукта, остаток в граммах"""
        db = localDb_Class()
        query = "SELECT p.id, SUM(i.rest) as sum FROM income AS i, product AS p WHERE p.id=i.product AND i.rest>0 AND i.active AND p.active GROUP BY p.id"
        rows = {pid:val for pid,val in db.exec_query(query)['rows']}
        db.close_db()
        return rows

    def insertValsIntoWidget(self):
        """Создает дерево блюд по разделам"""
        self.groupWidget = {}
        self.productWidget = {}
        self.menuWidget = {}
        map(self.setHeader,self.getSections()['rows'])
        map(self.setRow,self.getRows()['rows'])

    def getSections(self):
        """Берет список разделов"""
        db = localDb_Class()
        query = "SELECT DISTINCT s.id, s.name FROM section as s, dish as d WHERE d.section=s.id"
        vals = db.exec_query(query)
        db.close_db()
        return vals

    def getRows(self):
        """Список блюд"""
        db = localDb_Class()
        vals = db.select_all_val('dish')
        db.close_db()
        return vals

    def saveMenu(self):
        """Сохраняет меню"""
        db = localDb_Class()
        #try:
        for did in self.menuWidget:
            self.save_calculate(did,db)
        self.renew()
        #except:
            #None
        db.close_db()

    def save_calculate(self, did, db):
        """Проводит запись блюда и калькуляции"""
        self.save_calc(did,db)
        self.save_menu_item(did,db)

    def save_calc(self, did, db):
        """Сохраняет калькуляцию"""
        try:
            self.menuWidget[did].amortizate()
        except:
            print "edtertwert"
        for product in self.menuWidget[did].amortization:
            for income in self.menuWidget[did].amortization[product]:
                db.insert_val('calculate',(income, product, self.menuWidget[did].did, self.menuWidget[did].price))
                row = db.select_val_by_id('income',income)['rows'][0]['rest']
                amortization = row - self.menuWidget[did].consumption[product] * self.menuWidget[did].amortization[product][income]
                db.update_val_by_id_name('income',income,'rest',amortization)


    def save_menu_item(self, did, db):
        """Сохраняет строку из меню"""
        db.insert_val('menu',(did, self.shift.shift, self.menuWidget[did].portions, self.menuWidget[did].portions, self.menuWidget[did].price))

    def select_menu(self,shift):
        """Выбор строк меню"""
        db = localDb_Class()
        query = "SELECT m.id, d.name, m.price FROM menu as m,dish as d,shift as s WHERE "
        query += "s.shift=m.shift AND d.id=m.id AND s.shift=%s" % shift
        rows = db.exec_query(query)
        db.close_db()
        return rows

    def select_consumption(self):
        """Формирует цену на продукт на порцию блюда"""
        db = localDb_Class()
        query = "SELECT p.id as product, c.brutto "# i.price*i.coefficient*c.brutto/i.mass as price "
        query += "FROM consumption as c, product as p, income as i WHERE "
        query += "c.product = p.id AND i.product=p.id AND c.dish=" + "\'%s\'" % self.id
        rows = db.exec_query(query)
        db.close_db()
        return rows

## UI ##

    def setupUi(self):

        self.ui = Ui_Menu()
        self.ui.setupUi(self)
        self.insertValsIntoWidget()
        self.connect(self.ui.saveMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("saveMenu()"))
        self.connect(self.ui.addDishButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("addDish()"))
        self.connect(self.ui.treeWidgetDish, QtCore.SIGNAL("itemClicked ( QTreeWidgetItem*, int )"), self.onClick)
        self.connect(self.ui.addToMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("addToMenu()"))
        self.connect(self.ui.delFromMenuButton, QtCore.SIGNAL("clicked()"),QtCore.SLOT("delFromMenu()"))

    def clear(self):
        """Очистка формы"""
        self.ui.treeWidgetDish.clear()
        self.ui.treeWidgetMenu.clear()

    def setHeader(self,row):
        """Расстановка заголовков разделов"""
        widget = QtGui.QTreeWidgetItem(0)
        widget.setText(0,u"%s" % row[1])

        self.groupWidget[row['id']] = widget
        self.ui.treeWidgetDish.addTopLevelItem(self.groupWidget[row['id']])
        self.ui.treeWidgetDish.setFirstItemColumnSpanned(self.groupWidget[row['id']],True)
        self.groupWidget[row['id']].setExpanded(True)

    def setRow(self,row):
        """Заполнение списка блюд"""
        #widget = productDishPanel_Class(self, (row['id'], row['name']))
        try:
            widget = productDishPanel_Class(self, (row['id'], row['name']))
            self.productWidget[row['id']] = widget
            self.groupWidget[int(row['section'])].insertChild(0,self.productWidget[row['id']])
        except:
            None

    def addDish(self):
        """Добавляет блюдо"""
        form = Dish_Class(self)
        form.show()

    def delFromMenu(self):
        """Удаление строки из меню"""
        self.ui.treeWidgetMenu.removeRow(self.ui.treeWidgetMenu.currentRow())

    def addToMenu(self):
        item = self.ui.treeWidgetDish.currentItem()
        item.onClick()

    def onClick(self, item, column = None ):
        """item это объект productDishPanel_Class """
        item.onClick()


    def onSubmitCount(self):
        widget = self.ui.treeWidgetDish.currentItem()
        widget.widgetCount.close()
        widget.widgetCount.value = widget.widgetCount.ui.spinBox.value()
        widget.recount(widget.widgetCount.value)

    def onCloseCount(self):
        widget = self.ui.treeWidgetDish.currentItem()
        widget.widgetCount.close()
        widget.widgetCount.value = None
예제 #3
0
파일: Menu_Class.py 프로젝트: freel/canteen
class Menu_Class(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.parent = parent
        self.setupData()
        self.setupUi()

    def renew(self):
        """обновление данных"""
        self.clear()
        self.setupData()
        self.insertValsIntoWidget()

    def renewPortions(self):
        for num in self.productWidget:
            self.productWidget[num].portions = self.productWidget[num].select_max_portions()
            self.productWidget[num].changeCount()
            if self.productWidget[num].portions <= 0:
                self.productWidget[num].setDisabled(True)

    ## DATA ##

    def setupData(self):
        """Заполнение переменных и формы"""
        self.shift = self.parent.shift
        self.products = self.getProductRest()

    def getProductRest(self):
        """Выбираем остаток продуктов на складе
         ID прихода, ID продукта, остаток в граммах"""
        db = localDb_Class()
        query = "SELECT p.id, SUM(i.rest) as sum FROM income AS i, product AS p WHERE p.id=i.product AND i.rest>0 AND i.active AND p.active GROUP BY p.id"
        rows = {pid: val for pid, val in db.exec_query(query)["rows"]}
        db.close_db()
        return rows

    def insertValsIntoWidget(self):
        """Создает дерево продуктов по разделам"""
        self.groupWidget = {}
        self.productWidget = {}
        self.menuWidget = {}
        map(self.setHeader, self.getSections()["rows"])
        map(self.setRow, self.getRows()["rows"])

    def getSections(self):
        """Берет список разделов"""
        db = localDb_Class()
        query = "SELECT DISTINCT s.id, s.name FROM section as s, dish as d WHERE d.section=s.id"
        vals = db.exec_query(query)
        db.close_db()
        return vals

    def getRows(self):
        """Список блюд"""
        db = localDb_Class()
        vals = db.select_all_val("dish")
        db.close_db()
        return vals

    def saveMenu(self):
        """Сохраняет меню"""
        for did in self.menuWidget:
            self.save_calculate(did)
        self.renew()

    def save_calculate(self, did):
        """Проводит запись блюда и калькуляции"""
        self.save_calc(did)
        self.save_menu_item(did)

    def save_calc(self, did):
        """Сохраняет калькуляцию"""
        db = localDb_Class()
        self.menuWidget[did].amortizate()
        for product in self.menuWidget[did].amortization:
            for income in self.menuWidget[did].amortization[product]:
                db.insert_val(
                    "calculate", (income, product, self.menuWidget[did].did, self.menuWidget[did].product[product])
                )
                row = db.select_val_by_id("income", income)["rows"][0]["rest"]
                amortization = (
                    row - self.menuWidget[did].consumption[product] * self.menuWidget[did].amortization[product][income]
                )
                db.update_val_by_id_name("income", income, "rest", amortization)
        db.close_db()

    def save_menu_item(self, did):
        """Сохраняет строку из меню"""
        db = localDb_Class()
        db.insert_val(
            "menu",
            (
                did,
                self.shift.shift,
                self.menuWidget[did].portions,
                self.menuWidget[did].portions,
                self.menuWidget[did].price,
            ),
        )
        db.close_db()

    def select_menu(self, shift):
        """Выбор строк меню"""
        db = localDb_Class()
        query = "SELECT m.id, d.name, m.price FROM menu as m,dish as d,shift as s WHERE "
        query += "s.shift=m.shift AND d.id=m.id AND s.shift=%s" % shift
        rows = db.exec_query(query)
        db.close_db()
        return rows

    def select_consumption(self):
        """Формирует цену на продукт на порцию блюда"""
        db = localDb_Class()
        query = "SELECT p.id as product, c.brutto "  # i.price*i.coefficient*c.brutto/i.mass as price "
        query += "FROM consumption as c, product as p, income as i WHERE "
        query += "c.product = p.id AND i.product=p.id AND c.dish=" + "'%s'" % self.id
        rows = db.exec_query(query)
        db.close_db()
        return rows

    ## UI ##

    def setupUi(self):

        self.ui = Ui_Menu()
        self.ui.setupUi(self)
        self.insertValsIntoWidget()
        self.connect(self.ui.saveMenuButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("saveMenu()"))
        self.connect(self.ui.addDishButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("addDish()"))
        self.connect(self.ui.treeWidgetDish, QtCore.SIGNAL("itemClicked ( QTreeWidgetItem*, int )"), self.onClick)
        self.connect(self.ui.addToMenuButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("addToMenu()"))
        self.connect(self.ui.delFromMenuButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("delFromMenu()"))

    def clear(self):
        """Очистка формы"""
        self.ui.treeWidgetDish.clear()
        self.ui.treeWidgetMenu.clear()

    def setHeader(self, row):
        """Расстановка заголовков разделов"""
        widget = QtGui.QTreeWidgetItem(0)
        widget.setText(0, u"%s" % row[1])

        self.groupWidget[row["id"]] = widget
        self.ui.treeWidgetDish.addTopLevelItem(self.groupWidget[row["id"]])
        self.ui.treeWidgetDish.setFirstItemColumnSpanned(self.groupWidget[row["id"]], True)
        self.groupWidget[row["id"]].setExpanded(True)

    def setRow(self, row):
        """Заполнение списка блюд"""
        # widget = productDishPanel_Class(self, (row['id'], row['name']))

        # try:
        # ~ print (row['id'], row['name'])
        widget = productDishPanel_Class(self, (row["id"], row["name"]))
        self.productWidget[row["id"]] = widget
        self.groupWidget[int(row["section"])].insertChild(0, self.productWidget[row["id"]])
        # except:
        #    None

    def addDish(self):
        """Добавляет блюдо"""
        form = Dish_Class(self)
        form.show()

    # ~ def delFromMenu(self):
    # ~ """Удаление строки из меню"""
    # ~ self.renew()
    # ~ item = self.ui.treeWidgetMenu.currentItem()
    # ~ item.delFromMenu()
    # ~ self.ui.treeWidgetMenu.removeRow(self.ui.treeWidgetMenu.currentRow())

    def addToMenu(self):
        item = self.ui.treeWidgetDish.currentItem()
        self.onClick(item)

    def onClick(self, item, column=None):
        """item это объект productDishPanel_Class """
        self.openCount(item)

    ## WidgetCount ##

    def openCount(self, item):
        """Открывается окно с количеством добавляемых блюд
        По нажаию на ОК выполняется onSubmitCount()"""
        self.widgetCount = QtGui.QWidget(self.parent, QtCore.Qt.Window)
        self.widgetCount.setWindowModality(QtCore.Qt.ApplicationModal)
        self.widgetCount.ui = Ui_DishCount()
        self.widgetCount.ui.setupUi(self.widgetCount)
        self.widgetCount.item = item
        self.widgetCount.ui.spinBox.setMinimum(0)
        self.widgetCount.ui.spinBox.setMaximum(self.widgetCount.item.portions)

        self.connect(self.widgetCount.ui.submitButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("onSubmitCount()"))
        self.connect(self.widgetCount.ui.closeButton, QtCore.SIGNAL("clicked()"), QtCore.SLOT("onCloseCount()"))
        self.widgetCount.show()

    def onSubmitCount(self):
        """Вызывается при принятии окна с количеством
        Добаввляет в меню блюдо в указанном количестве"""
        self.widgetCount.close()
        self.widgetCount.value = self.widgetCount.ui.spinBox.value()
        item = self.widgetCount.item
        portions = self.widgetCount.value
        item.removePortions(portions)
        for product in item.consumption:
            self.products[product] -= item.consumption[product] * portions
        if item.did in self.menuWidget:
            item.changeCount()
            self.menuWidget[item.did].portions += portions
            self.menuWidget[item.did].setText(1, u"%s" % self.menuWidget[item.did].portions)
        else:
            widget = productMenuPanel_Class(self, (item.did, item.name, portions))
            # widget.portions = portions
            widget.max_amortization = item.max_amortization
            # widget.price = widget.getDishPrice()
            item.setText(1, u"%s" % item.portions)
            widget.setText(1, u"%s" % widget.portions)
            self.menuWidget[item.did] = widget
            self.ui.treeWidgetMenu.addTopLevelItem(self.menuWidget[item.did])
        self.renewPortions()

    def onCloseCount(self):
        """Вызывается при закрытии окна с количеством"""
        self.widgetCount.close()
        self.widgetCount.value = None

    def delFromMenu(self):
        """Удаляет из меню"""
        item = self.ui.treeWidgetMenu.currentItem()
        portions = item.portions
        item.removePortions(portions)
        for product in item.consumption:
            self.products[product] += item.consumption[product] * portions
        if item.did in self.productWidget:
            item.changeCount()
            self.productWidget[item.did].portions += portions
            self.productWidget[item.did].setText(1, u"%s" % self.productWidget[item.did].portions)
        else:
            widget = productDishPanel_Class(self, (item.did, item.name, portions))
            # widget.portions = portions
            widget.max_amortization = item.max_amortization
            # widget.price = widget.getDishPrice()
            item.setText(1, u"%s" % item.portions)
            widget.setText(1, u"%s" % widget.portions)
            self.productWidget[item.did] = widget
            self.ui.treeWidgetDish.addTopLevelItem(self.productWidget[item.did])
        self.ui.treeWidgetMenu.takeTopLevelItem(self.ui.treeWidgetMenu.indexOfTopLevelItem(item))
        del self.menuWidget[item.did]
        self.renewPortions()